diff --git a/.dockerignore b/.dockerignore
index 58830e8..88103c7 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -6,4 +6,4 @@ venv
Dockerfile
.dockerignore
.gitignore
-settings.txt
+local.env
diff --git a/.flake8 b/.flake8
index 35f6b06..1ad81e7 100644
--- a/.flake8
+++ b/.flake8
@@ -1,4 +1,3 @@
[flake8]
max-line-length = 88
-extend-ignore = E203,E501
-exclude = .git,__pycache__,proto,venv
+ignore = E501, E203, W503
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 231dd54..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,26 +0,0 @@
----
-name: CI
-
-on: [push]
-
-jobs:
- build:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- python-version: [3.8]
-
- steps:
- - uses: actions/checkout@v2
- - name: use python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
- with:
- python-version: ${{ matrix.python-version }}
-
- - name: install
- run: |
- python -m pip install --upgrade pip wheel
- pip install --require-hashes -r requirements/ci.txt
-
- - name: lint
- run: make lint
diff --git a/.github/workflows/code-quality.yaml b/.github/workflows/code-quality.yaml
new file mode 100644
index 0000000..3a0e6b8
--- /dev/null
+++ b/.github/workflows/code-quality.yaml
@@ -0,0 +1,12 @@
+name: Code Quality
+
+on: [pull_request, push]
+
+jobs:
+ pre-commit:
+ name: Linting
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ - uses: pre-commit/action@v2.0.0
diff --git a/.gitignore b/.gitignore
index 2e735d8..70ce279 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,4 @@ __pycache__/
venv
.mypy_cache
.idea
-settings.txt
+local.env
diff --git a/.mypy.ini b/.mypy.ini
deleted file mode 100644
index f65281c..0000000
--- a/.mypy.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[mypy]
-strict = True
-allow_untyped_calls=True
-warn_return_any=False
-
-[mypy-proto.*]
-ignore_errors = True
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..b0b1297
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,21 @@
+repos:
+ - repo: https://github.com/psf/black
+ rev: 21.9b0
+ hooks:
+ - id: black
+
+ - repo: https://gitlab.com/pycqa/flake8
+ rev: 3.9.2
+ hooks:
+ - id: flake8
+
+ - repo: https://github.com/timothycrosley/isort
+ rev: 5.9.3
+ hooks:
+ - id: isort
+
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.0.1
+ hooks:
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
diff --git a/Dockerfile b/Dockerfile
index b15fb49..08e2486 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,44 +1,63 @@
-###########
-# Builder #
-###########
-FROM python:3.8.10-slim AS builder
+# `python-base` sets up all our shared environment variables
+FROM python:3.8.11-slim as python-base
-# This is where pip will install to
-ENV PYROOT /pyroot
-# A convenience to have console_scripts in PATH
-ENV PYTHONUSERBASE $PYROOT
+ # python
+ENV PYTHONUNBUFFERED=1 \
+ # prevents python creating .pyc files
+ PYTHONDONTWRITEBYTECODE=1 \
+ \
+ # pip
+ PIP_NO_CACHE_DIR=off \
+ PIP_DISABLE_PIP_VERSION_CHECK=on \
+ PIP_DEFAULT_TIMEOUT=100 \
+ \
+ # poetry
+ # https://python-poetry.org/docs/configuration/#using-environment-variables
+ POETRY_VERSION=1.1.8 \
+ # make poetry install to this location
+ POETRY_HOME="/opt/poetry" \
+ # make poetry create the virtual environment in the project's root
+ # it gets named `.venv`
+ POETRY_VIRTUALENVS_IN_PROJECT=true \
+ # do not ask any interactive question
+ POETRY_NO_INTERACTION=1 \
+ \
+ # paths
+ # this is where our requirements + virtual environment will live
+ PYSETUP_PATH="/opt/pysetup" \
+ VENV_PATH="/opt/pysetup/.venv"
-WORKDIR /build
+# prepend poetry and venv to path
+ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"
-# Setup virtualenv
-RUN python -m venv /opt/venv
-ENV PATH="/opt/venv/bin:$PATH"
-# Copy requirements
-COPY requirements/prod.txt ./
+# `builder-base` stage is used to build deps + create our virtual environment
+FROM python-base as builder-base
-# Install build dependencies
-RUN apt-get update && \
- apt-get install -y \
- gcc \
- && rm -rf /var/lib/apt/lists/*
+RUN apt-get update \
+ && apt-get install --no-install-recommends -y \
+ # deps for installing poetry
+ curl \
+ # deps for building python deps
+ build-essential
-# Install dependencies
-RUN pip install --upgrade --no-cache-dir pip wheel && \
- pip install --require-hashes -r prod.txt
+# install poetry - respects $POETRY_VERSION & $POETRY_HOME
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
-####################
-# Production image #
-####################
-FROM python:3.8.10-slim
+# copy project requirement files here to ensure they will be cached.
+WORKDIR $PYSETUP_PATH
+COPY poetry.lock pyproject.toml ./
-# Dependencies path
-ENV PATH="/opt/venv/bin:$PATH"
+# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally
+RUN poetry install --no-dev
-WORKDIR /app
+
+# `production` image used for runtime
+FROM python-base as production
# Copy dependencies from build container
-COPY --from=builder /opt/venv /opt/venv
+WORKDIR /app
+COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH
# Copy source code
COPY . ./
diff --git a/LICENSE b/LICENSE
index f666519..2a25799 100644
--- a/LICENSE
+++ b/LICENSE
@@ -662,4 +662,4 @@ specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
-.
\ No newline at end of file
+.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index cb9c4ba..0000000
--- a/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-.PHONY: lint
-lint:
- black . --check --exclude proto
- flake8
-lint-mypy:
- mypy .
diff --git a/README.md b/README.md
index 61edd8b..ce4216c 100644
--- a/README.md
+++ b/README.md
@@ -1,132 +1,103 @@
# StakeWise Oracle
-Oracles are responsible for submitting off-chain data of StakeWise pool validators from ETH2 beacon chain
-to the [Oracles](https://github.com/stakewise/contracts/blob/master/contracts/Oracles.sol) smart contract.
+Oracles are responsible for voting on the new ETH2 rewards for the StakeWise sETH2 tokens holders and calculating Merkle
+root and proofs for the additional token distributions through the
+[Merkle Distributor](https://github.com/stakewise/contracts/blob/master/contracts/merkles/MerkleDistributor.sol)
+contract. The votes are submitted to the IPFS and mapped to the IPNS record. The keeper will aggregate the votes from
+all the oracles by looking up their IPNS records and will submit the update transaction.
-## Installation
+## Onboarding
-### Prerequisites
+To get onboarded as an oracle, you have to get approved and included by the DAO. You can read more about
+responsibilities and benefits of being an oracle [here](link to forum post about becoming an oracle).
-- [Python **3.8+**](https://www.python.org/about/gettingstarted/)
-- [pip3](https://pip.pypa.io/en/stable/installing/)
-- [Geth **v1.9.25+**](https://github.com/ethereum/go-ethereum)
-- [Prysm **v1.0.5+**](https://github.com/prysmaticlabs/prysm)
+## Dependencies
-### Option 1. Build `oracle` with native Python
+### IPFS Node
-```shell script
-pip3 install -r requirements/prod.txt
-```
+The [IPFS Node](https://docs.ipfs.io/install/) is used for pinning Merkle proofs files and sharing votes through the
+IPNS.
-### Option 2. Build `oracle` with `virtualenv`
+### Graph Node
-For the [virtualenv](https://virtualenv.pypa.io/en/latest/) users, you can create a new `venv`:
+The [Graph Node](https://github.com/graphprotocol/graph-node) from the Graph Protocol is used for syncing smart
+contracts data and allows oracle to perform complex queries using GraphQL. Either [self-hosted (preferred)]()
+or `https://api.thegraph.com/subgraphs/name/stakewise/stakewise-`
+endpoint can be used.
-```shell script
-python3 -m venv venv
-source venv/bin/activate
-```
+### ETH2 Node
+
+The ETH2 node is used to fetch StakeWise validators data (statuses, balances). Any ETH2 client that
+supports [ETH2 Beacon Node API specification](https://ethereum.github.io/beacon-APIs/#/) can be used:
-and install the dependencies:
+- [Lighthouse](https://launchpad.ethereum.org/en/lighthouse)
+- [Nimbus](https://launchpad.ethereum.org/en/nimbus)
+- [Prym](https://launchpad.ethereum.org/en/prysm)
+- [Teku](https://launchpad.ethereum.org/en/teku)
+- [Infura](https://infura.io/docs/eth2) (hosted)
+
+## Installation
+
+### Option 1. Build with [Docker](https://www.docker.com/get-started)
+
+Run the following command locally to build the docker image:
```shell script
-pip install -r requirements/prod.txt
+docker build --pull -t stakewiselabs/oracle:latest .
```
-### Option 3. Build the docker image (see below to use the existing one)
+**You can also use [pre-build images](https://hub.docker.com/r/stakewiselabs/oracle/tags?page=1&ordering=last_updated)**
-Run the following command locally to build the docker image:
+### Option 2. Build with [Poetry](https://python-poetry.org/docs/)
```shell script
-docker build --pull -t oracle .
+poetry install --no-dev
```
## Usage
-### Option 1. Use the existing docker image
-
-Run the following command locally to start the oracle:
+### 1. Create an environment file with [Settings](#settings)
```shell script
-docker run --env-file ./settings.txt stakewiselabs/oracle:latest
+cat >./local.env <
+EOL
```
-where `settings.txt` is an environment file with [Settings](#settings).
+### 2. Start Oracle
-### Option 2. Run with Python
+#### Option 1. Run with Docker
Run the following command locally to start the oracle:
```shell script
-source ./settings.txt
-python src/main.py
+docker run --env-file ./local.env stakewiselabs/oracle:latest
```
-where `settings.txt` is an environment file with [Settings](#settings).
+where `local.env` is an environment file with [Settings](#settings).
-## Settings
+#### Option 2. Run with Poetry
-| Variable | Description | Required | Default |
-|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|-----------------------------------------------------------------------|
-| LOG_LEVEL | The log level of the oracle. | No | INFO |
-| WEB3_WS_ENDPOINT | The WS endpoint to the ETH1 client. Must be specified if `WEB3_HTTP_ENDPOINT` endpoint is not provided. | No | - |
-| WEB3_WS_ENDPOINT_TIMEOUT | The WS endpoint timeout in seconds. | No | 60 |
-| WEB3_HTTP_ENDPOINT | The HTTP endpoint to the ETH1 client. Must be specified if `WEB3_WS_ENDPOINT` endpoint is not provided. | No | - |
-| ORACLE_PRIVATE_KEY | The ETH1 private key of the operator (see `Generating Private Key` below). | Yes | - |
-| BEACON_CHAIN_RPC_ENDPOINT | The Beacon Chain RPC HTTP endpoint. | Yes | - |
-| ETHERSCAN_ADDRESS_BASE_URL | Etherscan base URL to the address details. | No | https://etherscan.io/address/ |
-| INJECT_POA_MIDDLEWARE | Whether to inject POA middleware into Web3 client (see [POA middleware](https://web3py.readthedocs.io/en/stable/middleware.html#geth-style-proof-of-authority)). | No | False |
-| INJECT_STALE_CHECK_MIDDLEWARE | Whether to check for stale ETH1 blocks in Web3 client (see [Stale check middleware](https://web3py.readthedocs.io/en/stable/middleware.html#stalecheck)). | No | False |
-| STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY | The time specified in seconds after which the block is considered stale in `INJECT_STALE_CHECK_MIDDLEWARE` middleware. Must be specified if `INJECT_STALE_CHECK_MIDDLEWARE` is set to `True`. | No | - |
-| INJECT_RETRY_REQUEST_MIDDLEWARE | Whether to retry failed transactions (see [Retry middleware](https://web3py.readthedocs.io/en/stable/middleware.html#httprequestretry)). | No | True |
-| INJECT_LOCAL_FILTER_MIDDLEWARE | Whether to store log event filters locally instead of storing on the ETH1 node (see [Local middleware](https://web3py.readthedocs.io/en/stable/middleware.html#locally-managed-log-and-block-filters)). | No | False |
-| BALANCE_WARNING_THRESHOLD | The telegram notification will be sent when the oracle's balance will drop below such amount of ether. | No | 0.1 |
-| BALANCE_ERROR_THRESHOLD | The program will exit with an error when the oracle's balance will drop below such amount of ether. | No | 0.05 |
-| APPLY_GAS_PRICE_STRATEGY | Defines whether the gas strategy should be applied. | No | True |
-| MAX_TX_WAIT_SECONDS | The preferred number of seconds the oracle is willing to wait for the transaction to mine. Will be applied only if `APPLY_GAS_PRICE_STRATEGY` is set to `True`. | No | 180 |
-| TRANSACTION_TIMEOUT | The maximum number of seconds the oracle is willing to wait for the transaction to mine. After that it will throw time out error. | No | 1800 |
-| ETH1_CONFIRMATION_BLOCKS | The required number of ETH1 confirmation blocks used to fetch the data. | No | 12 |
-| ETH2_CONFIRMATION_EPOCHS | The required number of ETH2 confirmation epochs used to fetch validator balances. | No | 3 |
-| PROCESS_INTERVAL | How long to wait before processing again (in seconds). | No | 300 |
-| VOTING_TIMEOUT | How long to wait for other oracles to vote (in seconds). | No | 3600 |
-| SYNC_BLOCKS_DELAY | Delay applied to the next update due to negative balance or no activated validators (in ETH1 blocks). | No | 277 |
-| ORACLE_VOTE_GAS_LIMIT | The maximum gas spent on oracle vote. | No | 250000 |
-| POOL_CONTRACT_ADDRESS | The address of the [Pool Contract](https://github.com/stakewise/contracts/blob/master/contracts/collectors/Pool.sol). | No | 0xC874b064f465bdD6411D45734b56fac750Cda29A |
-| ORACLES_CONTRACT_ADDRESS | The address of the [Oracle Contract](https://github.com/stakewise/contracts/blob/master/contracts/Oracles.sol). | No | 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514 |
-| DAO_ADDRESS | The address of the DAO. | No | 0x144a98cb1CdBb23610501fE6108858D9B7D24934 |
-| REWARD_ETH_CONTRACT_ADDRESS | The address of the [Reward ETH Token Contract](https://github.com/stakewise/contracts/blob/master/contracts/tokens/RewardEthToken.sol). | No | 0x20BC832ca081b91433ff6c17f85701B6e92486c5 |
-| STAKED_ETH_CONTRACT_ADDRESS | The address of the [Staked ETH Token Contract](https://github.com/stakewise/contracts/blob/master/contracts/tokens/StakedEthToken.sol). | No | 0xFe2e637202056d30016725477c5da089Ab0A043A |
-| MULTICALL_CONTRACT_ADDRESS | The address of the [Multicall Contract](https://github.com/makerdao/multicall/blob/master/src/Multicall.sol). | No | 0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441 |
-| MERKLE_DISTRIBUTOR_CONTRACT_ADDRESS | The address of the [Merkle Distributor Contract](https://github.com/stakewise/contracts/blob/master/contracts/merkles/MerkleDistributor.sol). | No | 0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20 |
-| BALANCER_VAULT_CONTRACT_ADDRESS | The address of the [Balances Vault Contract](https://github.com/balancer-labs/balancer-core-v2/blob/v1.0.0/contracts/vault/Vault.sol). | No | 0xBA12222222228d8Ba445958a75a0704d566BF2C8 |
-| ENS_RESOLVER_CONTRACT_ADDRESS | The address of the [ENS Resolver Contract](https://github.com/ensdomains/ens-contracts/blob/master/contracts/resolvers/PublicResolver.sol). | No | 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41 |
-| DAO_ENS_DOMAIN | The ENS address that stores the oracles TXT record. | No | stakewise.eth |
-| ORACLES_ENS_TEXT_RECORD | The ENS text record name that points to the URL of the config file. | No | oraclesconfig |
-| BALANCER_SUBGRAPH_URL | The Balancer V2 subgraph URL. | No | https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2 |
-| UNISWAP_V2_SUBGRAPH_URL | The Uniswap V2 subgraph URL. | No | https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2 |
-| UNISWAP_V3_SUBGRAPH_URL | The Uniswap V3 subgraph URL. | No | https://api.thegraph.com/subgraphs/name/stakewise/uniswap-v3 |
-| IPFS_ENDPOINT | The IPFS endpoint. | No | /dns/ipfs.infura.io/tcp/5001/https |
-| NOTIFIERS_TELEGRAM_TOKEN | Telegram chat token where notifications about low balance or errors will be sent. | No | - |
-| NOTIFIERS_TELEGRAM_CHAT_ID | Telegram chat ID where notifications about low balance or errors will be sent. | No | - |
-| SEND_TELEGRAM_NOTIFICATIONS | Defines whether to send telegram notifications about oracle balance and errors. | No | False |
-
-
-## Example settings
+Run the following command locally to start the oracle:
```shell script
-cat >./settings.txt <
-SEND_TELEGRAM_NOTIFICATIONS=True
-NOTIFIERS_TELEGRAM_TOKEN=12345token
-NOTIFIERS_TELEGRAM_CHAT_ID=123456
-EOL
+poetry run python main.py
```
-## Generating Private Key
+## Settings
-```shell script
-source venv/bin/activate
-python -c "from web3 import Web3; w3 = Web3(); acc = w3.eth.account.create(); print(f'private key={w3.toHex(acc.privateKey)}, account={acc.address}')"
-```
+| Variable | Description | Required | Default |
+|---------------------------|------------------------------------------------------------------------------------|----------|----------------------------------------------------------------------|
+| NETWORK | The network that the oracle is currently operating on. Choices are goerli, mainnet | No | mainnet |
+| ORACLE_PRIVATE_KEY | The ETH1 private key of the operator | Yes | - |
+| IPFS_ENDPOINT | The IPFS endpoint | No | /dns/localhost/tcp/5001/http |
+| ETH2_ENDPOINT | The ETH2 node endpoint | No | https://eth2-beacon-mainnet.infura.io |
+| STAKEWISE_SUBGRAPH_URL | The StakeWise subgraph URL | No | https://api.thegraph.com/subgraphs/name/stakewise/stakewise-mainnet |
+| UNISWAP_V3_SUBGRAPH_URL | The Uniswap V3 subgraph URL | No | https://api.thegraph.com/subgraphs/name/stakewise/uniswap-v3-mainnet |
+| KEEPER_ORACLES_SOURCE_URL | The Keeper source URL where IPNS records for the oracles are stored | No | https://github.com/stakewise/keeper/README.md |
+| PROCESS_INTERVAL | How long to wait before processing again (in seconds) | No | 180 |
+| ETH1_CONFIRMATION_BLOCKS | The required number of ETH1 confirmation blocks used to fetch the data | No | 15 |
+| LOG_LEVEL | The log level of the oracle | No | INFO |
diff --git a/contracts/__init__.py b/contracts/__init__.py
deleted file mode 100644
index ac7f7e1..0000000
--- a/contracts/__init__.py
+++ /dev/null
@@ -1,88 +0,0 @@
-import json
-import os
-
-from eth_typing.evm import ChecksumAddress
-from web3 import Web3
-from web3.contract import Contract
-
-from src.settings import (
- POOL_CONTRACT_ADDRESS,
- REWARD_ETH_CONTRACT_ADDRESS,
- STAKED_ETH_CONTRACT_ADDRESS,
- ORACLES_CONTRACT_ADDRESS,
- MULTICALL_CONTRACT_ADDRESS,
- MERKLE_DISTRIBUTOR_CONTRACT_ADDRESS,
- ENS_RESOLVER_CONTRACT_ADDRESS,
-)
-
-
-def get_reward_eth_contract(w3: Web3) -> Contract:
- """:returns instance of `RewardEthToken` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/RewardEthToken.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=REWARD_ETH_CONTRACT_ADDRESS)
-
-
-def get_staked_eth_contract(w3: Web3) -> Contract:
- """:returns instance of `StakedEthToken` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/StakedEthToken.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=STAKED_ETH_CONTRACT_ADDRESS)
-
-
-def get_multicall_contract(w3: Web3) -> Contract:
- """:returns instance of `Multicall` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/Multicall.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=MULTICALL_CONTRACT_ADDRESS)
-
-
-def get_pool_contract(w3: Web3) -> Contract:
- """:returns instance of `Pool` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/Pool.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=POOL_CONTRACT_ADDRESS)
-
-
-def get_oracles_contract(w3: Web3) -> Contract:
- """:returns instance of `Oracles` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/Oracles.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=ORACLES_CONTRACT_ADDRESS)
-
-
-def get_merkle_distributor_contract(w3: Web3) -> Contract:
- """:returns instance of `MerkleDistributor` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/MerkleDistributor.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=MERKLE_DISTRIBUTOR_CONTRACT_ADDRESS)
-
-
-def get_ens_resolver_contract(w3: Web3) -> Contract:
- """:returns instance of `ENS Resolver` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/ENS.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=ENS_RESOLVER_CONTRACT_ADDRESS)
-
-
-def get_erc20_contract(w3: Web3, contract_address: ChecksumAddress) -> Contract:
- """:returns instance of `ERC-20` contract."""
- current_dir = os.path.dirname(__file__)
- with open(os.path.join(current_dir, "abi/IERC20Upgradeable.json")) as f:
- abi = json.load(f)
-
- return w3.eth.contract(abi=abi, address=contract_address)
diff --git a/contracts/abi/ENS.json b/contracts/abi/ENS.json
deleted file mode 100644
index e7cb40c..0000000
--- a/contracts/abi/ENS.json
+++ /dev/null
@@ -1,863 +0,0 @@
-[
- {
- "inputs": [
- {
- "internalType": "contract ENS",
- "name": "_ens",
- "type": "address"
- }
- ],
- "payable": false,
- "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"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "indexed": true,
- "internalType": "string",
- "name": "indexedKey",
- "type": "string"
- },
- {
- "indexed": false,
- "internalType": "string",
- "name": "key",
- "type": "string"
- }
- ],
- "name": "TextChanged",
- "type": "event"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "contentTypes",
- "type": "uint256"
- }
- ],
- "name": "ABI",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- }
- ],
- "name": "addr",
- "outputs": [
- {
- "internalType": "address payable",
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "coinType",
- "type": "uint256"
- }
- ],
- "name": "addr",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "name": "authorisations",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- }
- ],
- "name": "clearDNSZone",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- }
- ],
- "name": "contenthash",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "name",
- "type": "bytes32"
- },
- {
- "internalType": "uint16",
- "name": "resource",
- "type": "uint16"
- }
- ],
- "name": "dnsRecord",
- "outputs": [
- {
- "internalType": "bytes",
- "name": "",
- "type": "bytes"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "name",
- "type": "bytes32"
- }
- ],
- "name": "hasDNSRecords",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes4",
- "name": "interfaceID",
- "type": "bytes4"
- }
- ],
- "name": "interfaceImplementer",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes[]",
- "name": "data",
- "type": "bytes[]"
- }
- ],
- "name": "multicall",
- "outputs": [
- {
- "internalType": "bytes[]",
- "name": "results",
- "type": "bytes[]"
- }
- ],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- }
- ],
- "name": "name",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- }
- ],
- "name": "pubkey",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "x",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "y",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "contentType",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "name": "setABI",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "coinType",
- "type": "uint256"
- },
- {
- "internalType": "bytes",
- "name": "a",
- "type": "bytes"
- }
- ],
- "name": "setAddr",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "a",
- "type": "address"
- }
- ],
- "name": "setAddr",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "target",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "isAuthorised",
- "type": "bool"
- }
- ],
- "name": "setAuthorisation",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes",
- "name": "hash",
- "type": "bytes"
- }
- ],
- "name": "setContenthash",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- }
- ],
- "name": "setDNSRecords",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes4",
- "name": "interfaceID",
- "type": "bytes4"
- },
- {
- "internalType": "address",
- "name": "implementer",
- "type": "address"
- }
- ],
- "name": "setInterface",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "string",
- "name": "name",
- "type": "string"
- }
- ],
- "name": "setName",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "x",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "y",
- "type": "bytes32"
- }
- ],
- "name": "setPubkey",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "string",
- "name": "key",
- "type": "string"
- },
- {
- "internalType": "string",
- "name": "value",
- "type": "string"
- }
- ],
- "name": "setText",
- "outputs": [],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes4",
- "name": "interfaceID",
- "type": "bytes4"
- }
- ],
- "name": "supportsInterface",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "payable": false,
- "stateMutability": "pure",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "node",
- "type": "bytes32"
- },
- {
- "internalType": "string",
- "name": "key",
- "type": "string"
- }
- ],
- "name": "text",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- }
-]
diff --git a/contracts/abi/IERC20Upgradeable.json b/contracts/abi/IERC20Upgradeable.json
deleted file mode 100644
index ea3bb35..0000000
--- a/contracts/abi/IERC20Upgradeable.json
+++ /dev/null
@@ -1,185 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Approval",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "from",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Transfer",
- "type": "event"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- }
-]
diff --git a/contracts/abi/MerkleDistributor.json b/contracts/abi/MerkleDistributor.json
deleted file mode 100644
index 48cdae5..0000000
--- a/contracts/abi/MerkleDistributor.json
+++ /dev/null
@@ -1,682 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "index",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "address[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "indexed": false,
- "internalType": "uint256[]",
- "name": "amounts",
- "type": "uint256[]"
- }
- ],
- "name": "Claimed",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "beneficiary",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "startBlock",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "endBlock",
- "type": "uint256"
- }
- ],
- "name": "DistributionAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "merkleRoot",
- "type": "bytes32"
- },
- {
- "indexed": false,
- "internalType": "string",
- "name": "merkleProofs",
- "type": "string"
- }
- ],
- "name": "MerkleRootUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "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": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "inputs": [],
- "name": "DEFAULT_ADMIN_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PAUSER_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addPauser",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "index",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "internalType": "address[]",
- "name": "tokens",
- "type": "address[]"
- },
- {
- "internalType": "uint256[]",
- "name": "amounts",
- "type": "uint256[]"
- },
- {
- "internalType": "bytes32[]",
- "name": "merkleProof",
- "type": "bytes32[]"
- }
- ],
- "name": "claim",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "_merkleRoot",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "_wordIndex",
- "type": "uint256"
- }
- ],
- "name": "claimedBitMap",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "token",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "beneficiary",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "durationInBlocks",
- "type": "uint256"
- }
- ],
- "name": "distribute",
- "outputs": [],
- "stateMutability": "nonpayable",
- "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": [
- {
- "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": "address",
- "name": "_admin",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "_rewardEthToken",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "_oracles",
- "type": "address"
- }
- ],
- "name": "initialize",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isAdmin",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "index",
- "type": "uint256"
- }
- ],
- "name": "isClaimed",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isPauser",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "lastUpdateBlockNumber",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "merkleRoot",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "oracles",
- "outputs": [
- {
- "internalType": "contract IOracles",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removePauser",
- "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": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "rewardEthToken",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "newMerkleRoot",
- "type": "bytes32"
- },
- {
- "internalType": "string",
- "name": "newMerkleProofs",
- "type": "string"
- }
- ],
- "name": "setMerkleRoot",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- }
-]
diff --git a/contracts/abi/Multicall.json b/contracts/abi/Multicall.json
deleted file mode 100644
index 6ab37db..0000000
--- a/contracts/abi/Multicall.json
+++ /dev/null
@@ -1,143 +0,0 @@
-[
- {
- "constant": true,
- "inputs": [],
- "name": "getCurrentBlockTimestamp",
- "outputs": [
- {
- "name": "timestamp",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": false,
- "inputs": [
- {
- "components": [
- {
- "name": "target",
- "type": "address"
- },
- {
- "name": "callData",
- "type": "bytes"
- }
- ],
- "name": "calls",
- "type": "tuple[]"
- }
- ],
- "name": "aggregate",
- "outputs": [
- {
- "name": "blockNumber",
- "type": "uint256"
- },
- {
- "name": "returnData",
- "type": "bytes[]"
- }
- ],
- "payable": false,
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getLastBlockHash",
- "outputs": [
- {
- "name": "blockHash",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "addr",
- "type": "address"
- }
- ],
- "name": "getEthBalance",
- "outputs": [
- {
- "name": "balance",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getCurrentBlockDifficulty",
- "outputs": [
- {
- "name": "difficulty",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getCurrentBlockGasLimit",
- "outputs": [
- {
- "name": "gaslimit",
- "type": "uint256"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [],
- "name": "getCurrentBlockCoinbase",
- "outputs": [
- {
- "name": "coinbase",
- "type": "address"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- },
- {
- "constant": true,
- "inputs": [
- {
- "name": "blockNumber",
- "type": "uint256"
- }
- ],
- "name": "getBlockHash",
- "outputs": [
- {
- "name": "blockHash",
- "type": "bytes32"
- }
- ],
- "payable": false,
- "stateMutability": "view",
- "type": "function"
- }
-]
diff --git a/contracts/abi/Oracles.json b/contracts/abi/Oracles.json
deleted file mode 100644
index c7c3c3c..0000000
--- a/contracts/abi/Oracles.json
+++ /dev/null
@@ -1,697 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "oracle",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "merkleRoot",
- "type": "bytes32"
- },
- {
- "indexed": false,
- "internalType": "string",
- "name": "merkleProofs",
- "type": "string"
- }
- ],
- "name": "MerkleRootVoteSubmitted",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "oracle",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "nonce",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "totalRewards",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "activatedValidators",
- "type": "uint256"
- }
- ],
- "name": "RewardsVoteSubmitted",
- "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": false,
- "internalType": "uint256",
- "name": "syncPeriod",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- }
- ],
- "name": "SyncPeriodUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "inputs": [],
- "name": "DEFAULT_ADMIN_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "ORACLE_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PAUSER_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addOracle",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addPauser",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "name": "candidates",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "currentNonce",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "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": [
- {
- "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": "address",
- "name": "oracle",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "candidateId",
- "type": "bytes32"
- }
- ],
- "name": "hasVote",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isAdmin",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "isMerkleRootVoting",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isOracle",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isPauser",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "isRewardsVoting",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeOracle",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removePauser",
- "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": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_syncPeriod",
- "type": "uint256"
- }
- ],
- "name": "setSyncPeriod",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "syncPeriod",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_merkleDistributor",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "_syncPeriod",
- "type": "uint256"
- }
- ],
- "name": "upgrade",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_nonce",
- "type": "uint256"
- },
- {
- "internalType": "bytes32",
- "name": "_merkleRoot",
- "type": "bytes32"
- },
- {
- "internalType": "string",
- "name": "_merkleProofs",
- "type": "string"
- }
- ],
- "name": "voteForMerkleRoot",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_nonce",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_totalRewards",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_activatedValidators",
- "type": "uint256"
- }
- ],
- "name": "voteForRewards",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- }
-]
diff --git a/contracts/abi/Pool.json b/contracts/abi/Pool.json
deleted file mode 100644
index 8da8c22..0000000
--- a/contracts/abi/Pool.json
+++ /dev/null
@@ -1,823 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "validatorIndex",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- }
- ],
- "name": "Activated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "activatedValidators",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- }
- ],
- "name": "ActivatedValidatorsUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "validatorIndex",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "ActivationScheduled",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "minActivatingDeposit",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- }
- ],
- "name": "MinActivatingDepositUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "pendingValidatorsLimit",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "address",
- "name": "sender",
- "type": "address"
- }
- ],
- "name": "PendingValidatorsLimitUpdated",
- "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": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "bytes",
- "name": "publicKey",
- "type": "bytes"
- },
- {
- "indexed": false,
- "internalType": "address",
- "name": "operator",
- "type": "address"
- }
- ],
- "name": "ValidatorRegistered",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "bytes32",
- "name": "withdrawalCredentials",
- "type": "bytes32"
- }
- ],
- "name": "WithdrawalCredentialsUpdated",
- "type": "event"
- },
- {
- "inputs": [],
- "name": "DEFAULT_ADMIN_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PAUSER_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "VALIDATOR_DEPOSIT",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "_validatorIndex",
- "type": "uint256"
- }
- ],
- "name": "activate",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- },
- {
- "internalType": "uint256[]",
- "name": "_validatorIndexes",
- "type": "uint256[]"
- }
- ],
- "name": "activateMultiple",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "activatedValidators",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "activations",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "addDeposit",
- "outputs": [],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addPauser",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_validatorIndex",
- "type": "uint256"
- }
- ],
- "name": "canActivate",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "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": [
- {
- "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": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isAdmin",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isPauser",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "minActivatingDeposit",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pendingValidators",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pendingValidatorsLimit",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "bytes",
- "name": "publicKey",
- "type": "bytes"
- },
- {
- "internalType": "bytes",
- "name": "signature",
- "type": "bytes"
- },
- {
- "internalType": "bytes32",
- "name": "depositDataRoot",
- "type": "bytes32"
- }
- ],
- "internalType": "struct IPool.Validator",
- "name": "_validator",
- "type": "tuple"
- }
- ],
- "name": "registerValidator",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removePauser",
- "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": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "newActivatedValidators",
- "type": "uint256"
- }
- ],
- "name": "setActivatedValidators",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_minActivatingDeposit",
- "type": "uint256"
- }
- ],
- "name": "setMinActivatingDeposit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_pendingValidatorsLimit",
- "type": "uint256"
- }
- ],
- "name": "setPendingValidatorsLimit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "_withdrawalCredentials",
- "type": "bytes32"
- }
- ],
- "name": "setWithdrawalCredentials",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_oracles",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "_activatedValidators",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_pendingValidators",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_minActivatingDeposit",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_pendingValidatorsLimit",
- "type": "uint256"
- }
- ],
- "name": "upgrade",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "validatorRegistration",
- "outputs": [
- {
- "internalType": "contract IDepositContract",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "withdrawalCredentials",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- }
-]
diff --git a/contracts/abi/RewardEthToken.json b/contracts/abi/RewardEthToken.json
deleted file mode 100644
index 36d7bca..0000000
--- a/contracts/abi/RewardEthToken.json
+++ /dev/null
@@ -1,1063 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Approval",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "maintainerFee",
- "type": "uint256"
- }
- ],
- "name": "MaintainerFeeUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "maintainer",
- "type": "address"
- }
- ],
- "name": "MaintainerUpdated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "bool",
- "name": "isDisabled",
- "type": "bool"
- }
- ],
- "name": "RewardsToggled",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "periodRewards",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "totalRewards",
- "type": "uint256"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "rewardPerToken",
- "type": "uint256"
- }
- ],
- "name": "RewardsUpdated",
- "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": "address",
- "name": "from",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Transfer",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "inputs": [],
- "name": "DEFAULT_ADMIN_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "DOMAIN_SEPARATOR",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PAUSER_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addPauser",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "name": "checkpoints",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "reward",
- "type": "uint128"
- },
- {
- "internalType": "uint128",
- "name": "rewardPerToken",
- "type": "uint128"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "claim",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "decimals",
- "outputs": [
- {
- "internalType": "uint8",
- "name": "",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "subtractedValue",
- "type": "uint256"
- }
- ],
- "name": "decreaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "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": [
- {
- "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": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "addedValue",
- "type": "uint256"
- }
- ],
- "name": "increaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isAdmin",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isPauser",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "lastUpdateBlockNumber",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "maintainer",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "maintainerFee",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "merkleDistributor",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "name",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "nonces",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removePauser",
- "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": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "rewardPerToken",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "",
- "type": "uint128"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "name": "rewardsDisabled",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_newMaintainer",
- "type": "address"
- }
- ],
- "name": "setMaintainer",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_newMaintainerFee",
- "type": "uint256"
- }
- ],
- "name": "setMaintainerFee",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "isDisabled",
- "type": "bool"
- }
- ],
- "name": "setRewardsDisabled",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalRewards",
- "outputs": [
- {
- "internalType": "uint128",
- "name": "",
- "type": "uint128"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "updateRewardCheckpoint",
- "outputs": [
- {
- "internalType": "bool",
- "name": "accRewardsDisabled",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account1",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "account2",
- "type": "address"
- }
- ],
- "name": "updateRewardCheckpoints",
- "outputs": [
- {
- "internalType": "bool",
- "name": "rewardsDisabled1",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "rewardsDisabled2",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "newTotalRewards",
- "type": "uint256"
- }
- ],
- "name": "updateTotalRewards",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_merkleDistributor",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "_lastUpdateBlockNumber",
- "type": "uint256"
- }
- ],
- "name": "upgrade",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- }
-]
diff --git a/contracts/abi/StakedEthToken.json b/contracts/abi/StakedEthToken.json
deleted file mode 100644
index 7b8838e..0000000
--- a/contracts/abi/StakedEthToken.json
+++ /dev/null
@@ -1,793 +0,0 @@
-[
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Approval",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "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": "address",
- "name": "from",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "Transfer",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "inputs": [],
- "name": "DEFAULT_ADMIN_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "DOMAIN_SEPARATOR",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "PAUSER_ROLE",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "addPauser",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "balanceOf",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "decimals",
- "outputs": [
- {
- "internalType": "uint8",
- "name": "",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "subtractedValue",
- "type": "uint256"
- }
- ],
- "name": "decreaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "distributorPrincipal",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "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": [
- {
- "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": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "addedValue",
- "type": "uint256"
- }
- ],
- "name": "increaseAllowance",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isAdmin",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "isPauser",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "mint",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "name",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "nonces",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "deadline",
- "type": "uint256"
- },
- {
- "internalType": "uint8",
- "name": "v",
- "type": "uint8"
- },
- {
- "internalType": "bytes32",
- "name": "r",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "s",
- "type": "bytes32"
- }
- ],
- "name": "permit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removeAdmin",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_account",
- "type": "address"
- }
- ],
- "name": "removePauser",
- "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": "bytes32",
- "name": "role",
- "type": "bytes32"
- },
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "symbol",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- },
- {
- "internalType": "bool",
- "name": "isDisabled",
- "type": "bool"
- }
- ],
- "name": "toggleRewards",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalDeposits",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "totalSupply",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transfer",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "sender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "recipient",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "transferFrom",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- }
-]
diff --git a/main.py b/main.py
index ec9af3d..d35ff47 100644
--- a/main.py
+++ b/main.py
@@ -1,114 +1,110 @@
+import asyncio
import logging
-from urllib.parse import urljoin
-
-import time
-
-from contracts import get_reward_eth_contract
-from src.merkle_distributor.distributor import Distributor
-from src.settings import (
- WEB3_WS_ENDPOINT,
- WEB3_WS_ENDPOINT_TIMEOUT,
- WEB3_HTTP_ENDPOINT,
- INJECT_POA_MIDDLEWARE,
- INJECT_STALE_CHECK_MIDDLEWARE,
- INJECT_RETRY_REQUEST_MIDDLEWARE,
- INJECT_LOCAL_FILTER_MIDDLEWARE,
- STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY,
- ORACLE_PRIVATE_KEY,
- BALANCE_WARNING_THRESHOLD,
- BALANCE_ERROR_THRESHOLD,
- APPLY_GAS_PRICE_STRATEGY,
- MAX_TX_WAIT_SECONDS,
- PROCESS_INTERVAL,
- BEACON_CHAIN_RPC_ENDPOINT,
- SEND_TELEGRAM_NOTIFICATIONS,
- LOG_LEVEL,
- ETHERSCAN_ADDRESS_BASE_URL,
-)
-from src.staking_rewards.rewards import Rewards
-from src.staking_rewards.utils import wait_prysm_ready, wait_contracts_ready
-from src.utils import (
- get_web3_client,
- configure_default_account,
- InterruptHandler,
- check_default_account_balance,
- telegram,
-)
+import signal
+from typing import Any
+
+import aiohttp
+
+from src.distributor.controller import DistributorController
+from src.eth1 import check_oracle_account, get_finalized_block, get_voting_parameters
+from src.ipfs import check_or_create_ipns_keys
+from src.rewards.controller import RewardsController
+from src.rewards.eth2 import get_finality_checkpoints, get_genesis
+from src.settings import LOG_LEVEL, PROCESS_INTERVAL
+from src.validators.controller import ValidatorsController
logging.basicConfig(
format="%(asctime)s %(name)-12s %(levelname)-8s %(message)s",
datefmt="%m-%d %H:%M",
level=LOG_LEVEL,
)
+logging.getLogger("backoff").addHandler(logging.StreamHandler())
+logger = logging.getLogger(__name__)
-def main() -> None:
- # setup Web3 client
- web3_client = get_web3_client(
- http_endpoint=WEB3_HTTP_ENDPOINT,
- ws_endpoint=WEB3_WS_ENDPOINT,
- ws_endpoint_timeout=WEB3_WS_ENDPOINT_TIMEOUT,
- apply_gas_price_strategy=APPLY_GAS_PRICE_STRATEGY,
- max_tx_wait_seconds=MAX_TX_WAIT_SECONDS,
- inject_retry_request=INJECT_RETRY_REQUEST_MIDDLEWARE,
- inject_poa=INJECT_POA_MIDDLEWARE,
- inject_local_filter=INJECT_LOCAL_FILTER_MIDDLEWARE,
- inject_stale_check=INJECT_STALE_CHECK_MIDDLEWARE,
- stale_check_allowable_delay=STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY,
- )
- # setup default account
- configure_default_account(web3_client, ORACLE_PRIVATE_KEY)
+class InterruptHandler:
+ """
+ Tracks SIGINT and SIGTERM signals.
+ https://stackoverflow.com/a/31464349
+ """
+
+ exit = False
+
+ def __init__(self) -> None:
+ signal.signal(signal.SIGINT, self.exit_gracefully)
+ signal.signal(signal.SIGTERM, self.exit_gracefully)
+
+ # noinspection PyUnusedLocal
+ def exit_gracefully(self, signum: int, frame: Any) -> None:
+ logger.info(f"Received interrupt signal {signum}, exiting...")
+ self.exit = True
+
+
+async def main() -> None:
+ # aiohttp session
+ session = aiohttp.ClientSession()
+
+ # check stakewise graphql connection
+ await get_finalized_block()
+
+ # check ETH2 API connection
+ await get_finality_checkpoints(session)
+
+ # check whether oracle has IPNS keys or create new ones
+ ipns_keys = check_or_create_ipns_keys()
+
+ # check whether oracle is part of the oracles set
+ await check_oracle_account()
# wait for interrupt
interrupt_handler = InterruptHandler()
- if SEND_TELEGRAM_NOTIFICATIONS:
- # Notify Telegram the oracle is warming up, so that
- # oracle maintainers know the service has restarted
- telegram.notify(
- message=f"Oracle starting with account [{web3_client.eth.default_account}]"
- f"({urljoin(ETHERSCAN_ADDRESS_BASE_URL, str(web3_client.eth.default_account))})",
- parse_mode="markdown",
- raise_on_errors=True,
- disable_web_page_preview=True,
- )
+ # fetch ETH2 genesis
+ genesis = await get_genesis(session)
- # wait for contracts to be upgraded to the oracles supported version
- reward_eth = get_reward_eth_contract(web3_client)
- wait_contracts_ready(
- test_query=reward_eth.functions.lastUpdateBlockNumber(),
- interrupt_handler=interrupt_handler,
- process_interval=PROCESS_INTERVAL,
+ rewards_controller = RewardsController(
+ aiohttp_session=session,
+ genesis_timestamp=int(genesis["genesis_time"]),
+ ipns_key_id=ipns_keys["rewards_key_id"],
)
-
- # wait that node is synced before trying to do anything
- wait_prysm_ready(
- interrupt_handler=interrupt_handler,
- endpoint=BEACON_CHAIN_RPC_ENDPOINT,
- process_interval=PROCESS_INTERVAL,
+ distributor_controller = DistributorController(
+ ipns_key_id=ipns_keys["distributor_key_id"]
+ )
+ validators_controller = ValidatorsController(
+ initialize_ipns_key_id=ipns_keys["validator_initialize_key_id"],
+ finalize_ipns_key_id=ipns_keys["validator_finalize_key_id"],
)
- # check oracle balance
- if SEND_TELEGRAM_NOTIFICATIONS:
- check_default_account_balance(
- w3=web3_client,
- warning_amount=BALANCE_WARNING_THRESHOLD,
- error_amount=BALANCE_ERROR_THRESHOLD,
- )
-
- staking_rewards = Rewards(w3=web3_client)
- merkle_distributor = Distributor(w3=web3_client)
while not interrupt_handler.exit:
- # check and update staking rewards
- staking_rewards.process()
-
- # check and update merkle distributor
- merkle_distributor.process()
-
+ # fetch current finalized ETH1 block data
+ finalized_block = await get_finalized_block()
+ current_block_number = finalized_block["block_number"]
+ current_timestamp = finalized_block["timestamp"]
+ voting_parameters = await get_voting_parameters(current_block_number)
+
+ await asyncio.gather(
+ # check and update staking rewards
+ rewards_controller.process(
+ voting_params=voting_parameters["rewards"],
+ current_block_number=current_block_number,
+ current_timestamp=current_timestamp,
+ ),
+ # check and update merkle distributor
+ distributor_controller.process(voting_parameters["distributor"]),
+ # initializes validators
+ validators_controller.initialize(
+ voting_params=voting_parameters["initialize_validator"],
+ current_block_number=current_block_number,
+ ),
+ # finalizes validators
+ validators_controller.finalize(voting_parameters["finalize_validator"]),
+ )
# wait until next processing time
- time.sleep(PROCESS_INTERVAL)
+ await asyncio.sleep(PROCESS_INTERVAL)
+
+ await session.close()
if __name__ == "__main__":
- main()
+ asyncio.run(main())
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..b8e7552
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,1723 @@
+[[package]]
+name = "aiodns"
+version = "3.0.0"
+description = "Simple DNS resolver for asyncio"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycares = ">=4.0.0"
+
+[[package]]
+name = "aiohttp"
+version = "3.7.4.post0"
+description = "Async http client/server framework (asyncio)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+aiodns = {version = "*", optional = true, markers = "extra == \"speedups\""}
+async-timeout = ">=3.0,<4.0"
+attrs = ">=17.3.0"
+brotlipy = {version = "*", optional = true, markers = "extra == \"speedups\""}
+cchardet = {version = "*", optional = true, markers = "extra == \"speedups\""}
+chardet = ">=2.0,<5.0"
+multidict = ">=4.5,<7.0"
+typing-extensions = ">=3.6.5"
+yarl = ">=1.0,<2.0"
+
+[package.extras]
+speedups = ["aiodns", "brotlipy", "cchardet"]
+
+[[package]]
+name = "async-timeout"
+version = "3.0.1"
+description = "Timeout context manager for asyncio programs"
+category = "main"
+optional = false
+python-versions = ">=3.5.3"
+
+[[package]]
+name = "attrs"
+version = "21.2.0"
+description = "Classes Without Boilerplate"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+
+[[package]]
+name = "backoff"
+version = "1.11.1"
+description = "Function decoration for backoff and retry"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "backports.entry-points-selectable"
+version = "1.1.0"
+description = "Compatibility shim providing selectable entry points for older implementations"
+category = "dev"
+optional = false
+python-versions = ">=2.7"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"]
+
+[[package]]
+name = "base58"
+version = "2.1.0"
+description = "Base58 and Base58Check implementation."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+tests = ["pytest (>=4.6)", "pytest-flake8", "pytest-cov", "PyHamcrest (>=2.0.2)", "coveralls", "pytest-benchmark"]
+
+[[package]]
+name = "bitarray"
+version = "1.2.2"
+description = "efficient arrays of booleans -- C extension"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "black"
+version = "21.9b0"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+click = ">=7.1.2"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0,<1"
+platformdirs = ">=2"
+regex = ">=2020.1.8"
+tomli = ">=0.2.6,<2.0.0"
+typing-extensions = ">=3.10.0.0"
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+python2 = ["typed-ast (>=1.4.2)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "brotlipy"
+version = "0.7.0"
+description = "Python binding to the Brotli library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cffi = ">=1.0.0"
+
+[[package]]
+name = "cached-property"
+version = "1.5.2"
+description = "A decorator for caching properties in classes."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "cchardet"
+version = "2.1.7"
+description = "cChardet is high speed universal character encoding detector."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "certifi"
+version = "2021.5.30"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "cffi"
+version = "1.14.6"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cfgv"
+version = "3.3.1"
+description = "Validate configuration and produce human readable error messages."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[[package]]
+name = "chardet"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "charset-normalizer"
+version = "2.0.5"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
+optional = false
+python-versions = ">=3.5.0"
+
+[package.extras]
+unicode_backport = ["unicodedata2"]
+
+[[package]]
+name = "click"
+version = "8.0.1"
+description = "Composable command line interface toolkit"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "cytoolz"
+version = "0.11.0"
+description = "Cython implementation of Toolz: High performance functional utilities"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+toolz = ">=0.8.0"
+
+[package.extras]
+cython = ["cython"]
+
+[[package]]
+name = "distlib"
+version = "0.3.2"
+description = "Distribution utilities"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "eth-abi"
+version = "2.1.1"
+description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding"
+category = "main"
+optional = false
+python-versions = ">=3.6, <4"
+
+[package.dependencies]
+eth-typing = ">=2.0.0,<3.0.0"
+eth-utils = ">=1.2.0,<2.0.0"
+parsimonious = ">=0.8.0,<0.9.0"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "pytest (==4.4.1)", "pytest-pythonpath (>=0.7.1)", "pytest-xdist (==1.22.3)", "tox (>=2.9.1,<3)", "eth-hash", "hypothesis (>=3.6.1,<4)", "flake8 (==3.4.1)", "isort (>=4.2.15,<5)", "mypy (==0.701)", "pydocstyle (>=3.0.0,<4)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.4.1)", "isort (>=4.2.15,<5)", "mypy (==0.701)", "pydocstyle (>=3.0.0,<4)"]
+test = ["pytest (==4.4.1)", "pytest-pythonpath (>=0.7.1)", "pytest-xdist (==1.22.3)", "tox (>=2.9.1,<3)", "eth-hash", "hypothesis (>=3.6.1,<4)"]
+tools = ["hypothesis (>=3.6.1,<4)"]
+
+[[package]]
+name = "eth-account"
+version = "0.5.5"
+description = "eth-account: Sign Ethereum transactions and messages with local private keys"
+category = "main"
+optional = false
+python-versions = ">=3.6, <4"
+
+[package.dependencies]
+bitarray = ">=1.2.1,<1.3.0"
+eth-abi = ">=2.0.0b7,<3"
+eth-keyfile = ">=0.5.0,<0.6.0"
+eth-keys = ">=0.2.1,<0.3.2 || >0.3.2,<0.4.0"
+eth-rlp = ">=0.1.2,<2"
+eth-utils = ">=1.3.0,<2"
+hexbytes = ">=0.1.0,<1"
+rlp = ">=1.0.0,<3"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "hypothesis (>=4.18.0,<5)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)"]
+test = ["hypothesis (>=4.18.0,<5)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"]
+
+[[package]]
+name = "eth-hash"
+version = "0.3.2"
+description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.dependencies]
+pycryptodome = {version = ">=3.6.6,<4", optional = true, markers = "extra == \"pycryptodome\""}
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)"]
+pycryptodome = ["pycryptodome (>=3.6.6,<4)"]
+pysha3 = ["pysha3 (>=1.0.0,<2.0.0)"]
+test = ["pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"]
+
+[[package]]
+name = "eth-keyfile"
+version = "0.5.1"
+description = "A library for handling the encrypted keyfiles used to store ethereum private keys."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cytoolz = ">=0.9.0,<1.0.0"
+eth-keys = ">=0.1.0-beta.4,<1.0.0"
+eth-utils = ">=1.0.0-beta.1,<2.0.0"
+pycryptodome = ">=3.4.7,<4.0.0"
+
+[[package]]
+name = "eth-keys"
+version = "0.3.3"
+description = "Common API for Ethereum key operations."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+eth-typing = ">=2.2.1,<3.0.0"
+eth-utils = ">=1.3.0,<2.0.0"
+
+[package.extras]
+coincurve = ["coincurve (>=7.0.0,<13.0.0)"]
+dev = ["tox (==2.7.0)", "bumpversion (==0.5.3)", "twine", "eth-utils (>=1.3.0,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)", "flake8 (==3.0.4)", "mypy (==0.701)", "asn1tools (>=0.146.2,<0.147)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==3.2.2)", "hypothesis (>=4.56.1,<5.0.0)", "eth-hash", "eth-hash"]
+eth-keys = ["eth-utils (>=1.3.0,<2.0.0)", "eth-typing (>=2.2.1,<3.0.0)"]
+lint = ["flake8 (==3.0.4)", "mypy (==0.701)"]
+test = ["asn1tools (>=0.146.2,<0.147)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==3.2.2)", "hypothesis (>=4.56.1,<5.0.0)", "eth-hash", "eth-hash"]
+
+[[package]]
+name = "eth-rlp"
+version = "0.2.1"
+description = "eth-rlp: RLP definitions for common Ethereum objects in Python"
+category = "main"
+optional = false
+python-versions = ">=3.6, <4"
+
+[package.dependencies]
+eth-utils = ">=1.0.1,<2"
+hexbytes = ">=0.1.0,<1"
+rlp = ">=0.6.0,<3"
+
+[package.extras]
+dev = ["Sphinx (>=1.6.5,<2)", "bumpversion (>=0.5.3,<1)", "eth-hash", "flake8 (==3.7.9)", "ipython", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=3.0.0,<4)", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "pytest (==5.4.1)", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)", "tox (==3.14.6)", "twine", "wheel"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=3.0.0,<4)"]
+test = ["eth-hash", "pytest-xdist", "pytest (==5.4.1)", "tox (==3.14.6)"]
+
+[[package]]
+name = "eth-typing"
+version = "2.2.2"
+description = "eth-typing: Common type annotations for ethereum python packages"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "pytest (>=4.4,<4.5)", "pytest-xdist", "tox (>=2.9.1,<3)", "flake8 (==3.8.3)", "isort (>=4.2.15,<5)", "mypy (==0.782)", "pydocstyle (>=3.0.0,<4)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+lint = ["flake8 (==3.8.3)", "isort (>=4.2.15,<5)", "mypy (==0.782)", "pydocstyle (>=3.0.0,<4)"]
+test = ["pytest (>=4.4,<4.5)", "pytest-xdist", "tox (>=2.9.1,<3)"]
+
+[[package]]
+name = "eth-utils"
+version = "1.10.0"
+description = "eth-utils: Common utility functions for python code that interacts with Ethereum"
+category = "main"
+optional = false
+python-versions = ">=3.5,!=3.5.2,<4"
+
+[package.dependencies]
+cytoolz = {version = ">=0.10.1,<1.0.0", markers = "implementation_name == \"cpython\""}
+eth-hash = ">=0.3.1,<0.4.0"
+eth-typing = ">=2.2.1,<3.0.0"
+toolz = {version = ">0.8.2,<1", markers = "implementation_name == \"pypy\""}
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel (>=0.30.0,<1.0.0)", "twine (>=1.13,<2)", "ipython", "hypothesis (>=4.43.0,<5.0.0)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "black (>=18.6b4,<19)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.720)", "pydocstyle (>=5.0.0,<6)", "pytest (>=3.4.1,<4.0.0)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<2)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<2)", "towncrier (>=19.2.0,<20)"]
+lint = ["black (>=18.6b4,<19)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.720)", "pydocstyle (>=5.0.0,<6)", "pytest (>=3.4.1,<4.0.0)"]
+test = ["hypothesis (>=4.43.0,<5.0.0)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"]
+
+[[package]]
+name = "filelock"
+version = "3.0.12"
+description = "A platform independent file lock."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "flake8"
+version = "3.9.2"
+description = "the modular source code checker: pep8 pyflakes and co"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+mccabe = ">=0.6.0,<0.7.0"
+pycodestyle = ">=2.7.0,<2.8.0"
+pyflakes = ">=2.3.0,<2.4.0"
+
+[[package]]
+name = "flake8-black"
+version = "0.2.3"
+description = "flake8 plugin to call black as a code style validator"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+black = "*"
+flake8 = ">=3.0.0"
+toml = "*"
+
+[[package]]
+name = "flake8-bugbear"
+version = "21.9.1"
+description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+attrs = ">=19.2.0"
+flake8 = ">=3.0.0"
+
+[package.extras]
+dev = ["coverage", "black", "hypothesis", "hypothesmith"]
+
+[[package]]
+name = "gql"
+version = "3.0.0a6"
+description = "GraphQL client for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+aiohttp = {version = ">=3.7.1,<3.8.0", optional = true, markers = "extra == \"aiohttp\""}
+graphql-core = ">=3.1.5,<3.2"
+yarl = ">=1.6,<2.0"
+
+[package.extras]
+aiohttp = ["aiohttp (>=3.7.1,<3.8.0)"]
+all = ["aiohttp (>=3.7.1,<3.8.0)", "requests (>=2.23,<3)", "websockets (>=9,<10)"]
+dev = ["aiohttp (>=3.7.1,<3.8.0)", "requests (>=2.23,<3)", "websockets (>=9,<10)", "black (==19.10b0)", "check-manifest (>=0.42,<1)", "flake8 (==3.8.1)", "isort (==4.3.21)", "mypy (==0.770)", "sphinx (>=3.0.0,<4)", "sphinx_rtd_theme (>=0.4,<1)", "sphinx-argparse (==0.2.5)", "parse (==1.15.0)", "pytest (==5.4.2)", "pytest-asyncio (==0.11.0)", "pytest-cov (==2.8.1)", "mock (==4.0.2)", "vcrpy (==4.0.2)", "aiofiles"]
+requests = ["requests (>=2.23,<3)"]
+test = ["aiohttp (>=3.7.1,<3.8.0)", "requests (>=2.23,<3)", "websockets (>=9,<10)", "parse (==1.15.0)", "pytest (==5.4.2)", "pytest-asyncio (==0.11.0)", "pytest-cov (==2.8.1)", "mock (==4.0.2)", "vcrpy (==4.0.2)", "aiofiles"]
+test_no_transport = ["parse (==1.15.0)", "pytest (==5.4.2)", "pytest-asyncio (==0.11.0)", "pytest-cov (==2.8.1)", "mock (==4.0.2)", "vcrpy (==4.0.2)", "aiofiles"]
+websockets = ["websockets (>=9,<10)"]
+
+[[package]]
+name = "graphql-core"
+version = "3.1.6"
+description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL."
+category = "main"
+optional = false
+python-versions = ">=3.6,<4"
+
+[[package]]
+name = "hexbytes"
+version = "0.2.2"
+description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output"
+category = "main"
+optional = false
+python-versions = ">=3.6, <4"
+
+[package.extras]
+dev = ["Sphinx (>=1.6.5,<2)", "bumpversion (>=0.5.3,<1)", "eth-utils (>=1.0.1,<2)", "flake8 (==3.7.9)", "hypothesis (>=3.44.24,<4)", "ipython", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "pytest (==5.4.1)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)", "tox (==3.14.6)", "twine", "wheel"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)"]
+test = ["eth-utils (>=1.0.1,<2)", "hypothesis (>=3.44.24,<4)", "pytest-xdist", "pytest (==5.4.1)", "tox (==3.14.6)"]
+
+[[package]]
+name = "identify"
+version = "2.2.14"
+description = "File identification library for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.extras]
+license = ["editdistance-s"]
+
+[[package]]
+name = "idna"
+version = "3.2"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "ipfshttpclient"
+version = "0.8.0a2"
+description = "Python IPFS HTTP CLIENT library"
+category = "main"
+optional = false
+python-versions = ">=3.6.2,!=3.7.0,!=3.7.1"
+
+[package.dependencies]
+multiaddr = ">=0.0.7"
+requests = ">=2.11"
+
+[[package]]
+name = "isort"
+version = "5.9.3"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1,<4.0"
+
+[package.extras]
+pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
+requirements_deprecated_finder = ["pipreqs", "pip-api"]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
+plugins = ["setuptools"]
+
+[[package]]
+name = "jsonschema"
+version = "3.2.0"
+description = "An implementation of JSON Schema validation for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+pyrsistent = ">=0.14.0"
+six = ">=1.11.0"
+
+[package.extras]
+format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
+format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+
+[[package]]
+name = "lru-dict"
+version = "1.1.7"
+description = "An Dict like LRU container."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mccabe"
+version = "0.6.1"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "multiaddr"
+version = "0.0.9"
+description = "Python implementation of jbenet's multiaddr"
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+
+[package.dependencies]
+base58 = "*"
+netaddr = "*"
+six = "*"
+varint = "*"
+
+[[package]]
+name = "multidict"
+version = "5.1.0"
+description = "multidict implementation"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "mypy"
+version = "0.910"
+description = "Optional static typing for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+mypy-extensions = ">=0.4.3,<0.5.0"
+toml = "*"
+typing-extensions = ">=3.7.4"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+python2 = ["typed-ast (>=1.4.0,<1.5.0)"]
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "netaddr"
+version = "0.8.0"
+description = "A network address manipulation library for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "nodeenv"
+version = "1.6.0"
+description = "Node.js virtual environment builder"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "parsimonious"
+version = "0.8.1"
+description = "(Soon to be) the fastest pure-Python PEG parser I could muster"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = ">=1.9.0"
+
+[[package]]
+name = "pathspec"
+version = "0.9.0"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[[package]]
+name = "platformdirs"
+version = "2.3.0"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"]
+test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"]
+
+[[package]]
+name = "pre-commit"
+version = "2.15.0"
+description = "A framework for managing and maintaining multi-language pre-commit hooks."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+cfgv = ">=2.0.0"
+identify = ">=1.0.0"
+nodeenv = ">=0.11.1"
+pyyaml = ">=5.1"
+toml = "*"
+virtualenv = ">=20.0.8"
+
+[[package]]
+name = "protobuf"
+version = "3.18.0"
+description = "Protocol Buffers"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "py-ecc"
+version = "5.2.0"
+description = "Elliptic curve crypto in python including secp256k1 and alt_bn128"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.dependencies]
+cached-property = ">=1.5.1,<2"
+eth-typing = ">=2.1.0,<3.0.0"
+eth-utils = ">=1.3.0,<2"
+mypy-extensions = ">=0.4.1"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "twine", "pytest (==3.10.1)", "pytest-xdist (==1.26.0)", "flake8 (==3.5.0)", "mypy (==0.641)", "mypy-extensions (>=0.4.1)"]
+lint = ["flake8 (==3.5.0)", "mypy (==0.641)", "mypy-extensions (>=0.4.1)"]
+test = ["pytest (==3.10.1)", "pytest-xdist (==1.26.0)"]
+
+[[package]]
+name = "pycares"
+version = "4.0.0"
+description = "Python interface for c-ares"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cffi = ">=1.5.0"
+
+[package.extras]
+idna = ["idna (>=2.1)"]
+
+[[package]]
+name = "pycodestyle"
+version = "2.7.0"
+description = "Python style guide checker"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pycparser"
+version = "2.20"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pycryptodome"
+version = "3.10.1"
+description = "Cryptographic library for Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pyflakes"
+version = "2.3.1"
+description = "passive checker of Python programs"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pyrsistent"
+version = "0.18.0"
+description = "Persistent/Functional/Immutable data structures"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "python-decouple"
+version = "3.4"
+description = "Strict separation of settings from code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pywin32"
+version = "301"
+description = "Python for Window Extensions"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyyaml"
+version = "5.4.1"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[[package]]
+name = "regex"
+version = "2021.8.28"
+description = "Alternative regular expression module, to replace re."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "requests"
+version = "2.26.0"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
+idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
+
+[[package]]
+name = "rlp"
+version = "2.0.1"
+description = "A package for Recursive Length Prefix encoding and decoding"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+eth-utils = ">=1.0.2,<2"
+
+[package.extras]
+dev = ["Sphinx (>=1.6.5,<2)", "bumpversion (>=0.5.3,<1)", "flake8 (==3.4.1)", "hypothesis (==5.19.0)", "ipython", "pytest-watch (>=4.1.0,<5)", "pytest-xdist", "pytest (==5.4.3)", "setuptools (>=36.2.0)", "sphinx-rtd-theme (>=0.1.9)", "tox (>=2.9.1,<3)", "twine", "wheel"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+lint = ["flake8 (==3.4.1)"]
+rust-backend = ["rusty-rlp (>=0.1.15,<0.2)"]
+test = ["hypothesis (==5.19.0)", "pytest (==5.4.3)", "tox (>=2.9.1,<3)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tenacity"
+version = "8.0.1"
+description = "Retry code until it succeeds"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+doc = ["reno", "sphinx", "tornado (>=4.5)"]
+
+[[package]]
+name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+category = "dev"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tomli"
+version = "1.2.1"
+description = "A lil' TOML parser"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "toolz"
+version = "0.11.1"
+description = "List processing tools and functional utilities"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "typing-extensions"
+version = "3.10.0.2"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "urllib3"
+version = "1.26.6"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "varint"
+version = "1.0.2"
+description = "Simple python varint implementation"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "virtualenv"
+version = "20.7.2"
+description = "Virtual Python Environment builder"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[package.dependencies]
+"backports.entry-points-selectable" = ">=1.0.4"
+distlib = ">=0.3.1,<1"
+filelock = ">=3.0.0,<4"
+platformdirs = ">=2,<3"
+six = ">=1.9.0,<2"
+
+[package.extras]
+docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"]
+testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"]
+
+[[package]]
+name = "web3"
+version = "5.23.1"
+description = "Web3.py"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4"
+
+[package.dependencies]
+aiohttp = ">=3.7.4.post0,<4"
+eth-abi = ">=2.0.0b6,<3.0.0"
+eth-account = ">=0.5.5,<0.6.0"
+eth-hash = {version = ">=0.2.0,<1.0.0", extras = ["pycryptodome"]}
+eth-typing = ">=2.0.0,<3.0.0"
+eth-utils = ">=1.9.5,<2.0.0"
+hexbytes = ">=0.1.0,<1.0.0"
+ipfshttpclient = "0.8.0a2"
+jsonschema = ">=3.2.0,<4.0.0"
+lru-dict = ">=1.1.6,<2.0.0"
+protobuf = ">=3.10.0,<4"
+pywin32 = {version = ">=223", markers = "platform_system == \"Windows\""}
+requests = ">=2.16.0,<3.0.0"
+websockets = ">=9.1,<10"
+
+[package.extras]
+dev = ["eth-tester[py-evm] (==v0.5.0-beta.4)", "py-geth (>=3.5.0,<4)", "flake8 (==3.8.3)", "isort (>=4.2.15,<4.3.5)", "mypy (==0.812)", "mock", "sphinx-better-theme (>=0.1.4)", "click (>=5.1)", "configparser (==3.5.0)", "contextlib2 (>=0.5.4)", "py-solc (>=0.4.0)", "pytest (>=4.4.0,<5.0.0)", "sphinx (>=3.0,<4)", "sphinx-rtd-theme (>=0.1.9)", "toposort (>=1.4)", "towncrier (>=19.2.0,<20)", "urllib3", "wheel", "bumpversion", "flaky (>=3.7.0,<4)", "hypothesis (>=3.31.2,<6)", "pytest-asyncio (>=0.10.0,<0.11)", "pytest-mock (>=1.10,<2)", "pytest-pythonpath (>=0.3)", "pytest-watch (>=4.2,<5)", "pytest-xdist (>=1.29,<2)", "setuptools (>=38.6.0)", "tox (>=1.8.0)", "tqdm (>4.32,<5)", "twine (>=1.13,<2)", "pluggy (==0.13.1)", "when-changed (>=0.3.0,<0.4)"]
+docs = ["mock", "sphinx-better-theme (>=0.1.4)", "click (>=5.1)", "configparser (==3.5.0)", "contextlib2 (>=0.5.4)", "py-geth (>=3.5.0,<4)", "py-solc (>=0.4.0)", "pytest (>=4.4.0,<5.0.0)", "sphinx (>=3.0,<4)", "sphinx-rtd-theme (>=0.1.9)", "toposort (>=1.4)", "towncrier (>=19.2.0,<20)", "urllib3", "wheel"]
+linter = ["flake8 (==3.8.3)", "isort (>=4.2.15,<4.3.5)", "mypy (==0.812)"]
+tester = ["eth-tester[py-evm] (==v0.5.0-beta.4)", "py-geth (>=3.5.0,<4)"]
+
+[[package]]
+name = "websockets"
+version = "9.1"
+description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[[package]]
+name = "yarl"
+version = "1.6.3"
+description = "Yet another URL library"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+idna = ">=2.0"
+multidict = ">=4.0"
+
+[metadata]
+lock-version = "1.1"
+python-versions = "==3.8.11"
+content-hash = "10aa447585eb88b9459e3d375a340848c0da7cf9c916e6836f96a0dc09ca6aad"
+
+[metadata.files]
+aiodns = [
+ {file = "aiodns-3.0.0-py3-none-any.whl", hash = "sha256:2b19bc5f97e5c936638d28e665923c093d8af2bf3aa88d35c43417fa25d136a2"},
+ {file = "aiodns-3.0.0.tar.gz", hash = "sha256:946bdfabe743fceeeb093c8a010f5d1645f708a241be849e17edfb0e49e08cd6"},
+]
+aiohttp = [
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-win32.whl", hash = "sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287"},
+ {file = "aiohttp-3.7.4.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-win32.whl", hash = "sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f"},
+ {file = "aiohttp-3.7.4.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-win32.whl", hash = "sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16"},
+ {file = "aiohttp-3.7.4.post0-cp38-cp38-win_amd64.whl", hash = "sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-win32.whl", hash = "sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9"},
+ {file = "aiohttp-3.7.4.post0-cp39-cp39-win_amd64.whl", hash = "sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe"},
+ {file = "aiohttp-3.7.4.post0.tar.gz", hash = "sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf"},
+]
+async-timeout = [
+ {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"},
+ {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"},
+]
+attrs = [
+ {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
+ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+]
+backoff = [
+ {file = "backoff-1.11.1-py2.py3-none-any.whl", hash = "sha256:61928f8fa48d52e4faa81875eecf308eccfb1016b018bb6bd21e05b5d90a96c5"},
+ {file = "backoff-1.11.1.tar.gz", hash = "sha256:ccb962a2378418c667b3c979b504fdeb7d9e0d29c0579e3b13b86467177728cb"},
+]
+"backports.entry-points-selectable" = [
+ {file = "backports.entry_points_selectable-1.1.0-py2.py3-none-any.whl", hash = "sha256:a6d9a871cde5e15b4c4a53e3d43ba890cc6861ec1332c9c2428c92f977192acc"},
+ {file = "backports.entry_points_selectable-1.1.0.tar.gz", hash = "sha256:988468260ec1c196dab6ae1149260e2f5472c9110334e5d51adcb77867361f6a"},
+]
+base58 = [
+ {file = "base58-2.1.0-py3-none-any.whl", hash = "sha256:8225891d501b68c843ffe30b86371f844a21c6ba00da76f52f9b998ba771fb48"},
+ {file = "base58-2.1.0.tar.gz", hash = "sha256:171a547b4a3c61e1ae3807224a6f7aec75e364c4395e7562649d7335768001a2"},
+]
+bitarray = [
+ {file = "bitarray-1.2.2.tar.gz", hash = "sha256:27a69ffcee3b868abab3ce8b17c69e02b63e722d4d64ffd91d659f81e9984954"},
+]
+black = [
+ {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"},
+ {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"},
+]
+brotlipy = [
+ {file = "brotlipy-0.7.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:af65d2699cb9f13b26ec3ba09e75e80d31ff422c03675fcb36ee4dabe588fdc2"},
+ {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:50ca336374131cfad20612f26cc43c637ac0bfd2be3361495e99270883b52962"},
+ {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:fd1d1c64214af5d90014d82cee5d8141b13d44c92ada7a0c0ec0679c6f15a471"},
+ {file = "brotlipy-0.7.0-cp27-cp27m-win32.whl", hash = "sha256:5de6f7d010b7558f72f4b061a07395c5c3fd57f0285c5af7f126a677b976a868"},
+ {file = "brotlipy-0.7.0-cp27-cp27m-win_amd64.whl", hash = "sha256:637847560d671657f993313ecc6c6c6666a936b7a925779fd044065c7bc035b9"},
+ {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:b4c98b0d2c9c7020a524ca5bbff42027db1004c6571f8bc7b747f2b843128e7a"},
+ {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8b39abc3256c978f575df5cd7893153277216474f303e26f0e43ba3d3969ef96"},
+ {file = "brotlipy-0.7.0-cp33-cp33m-macosx_10_6_intel.whl", hash = "sha256:96bc59ff9b5b5552843dc67999486a220e07a0522dddd3935da05dc194fa485c"},
+ {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:091b299bf36dd6ef7a06570dbc98c0f80a504a56c5b797f31934d2ad01ae7d17"},
+ {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:0be698678a114addcf87a4b9496c552c68a2c99bf93cf8e08f5738b392e82057"},
+ {file = "brotlipy-0.7.0-cp33-cp33m-win32.whl", hash = "sha256:d2c1c724c4ac375feb2110f1af98ecdc0e5a8ea79d068efb5891f621a5b235cb"},
+ {file = "brotlipy-0.7.0-cp33-cp33m-win_amd64.whl", hash = "sha256:3a3e56ced8b15fbbd363380344f70f3b438e0fd1fcf27b7526b6172ea950e867"},
+ {file = "brotlipy-0.7.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:653faef61241bf8bf99d73ca7ec4baa63401ba7b2a2aa88958394869379d67c7"},
+ {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:0fa6088a9a87645d43d7e21e32b4a6bf8f7c3939015a50158c10972aa7f425b7"},
+ {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:79aaf217072840f3e9a3b641cccc51f7fc23037496bd71e26211856b93f4b4cb"},
+ {file = "brotlipy-0.7.0-cp34-cp34m-win32.whl", hash = "sha256:a07647886e24e2fb2d68ca8bf3ada398eb56fd8eac46c733d4d95c64d17f743b"},
+ {file = "brotlipy-0.7.0-cp34-cp34m-win_amd64.whl", hash = "sha256:c6cc0036b1304dd0073eec416cb2f6b9e37ac8296afd9e481cac3b1f07f9db25"},
+ {file = "brotlipy-0.7.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:07194f4768eb62a4f4ea76b6d0df6ade185e24ebd85877c351daa0a069f1111a"},
+ {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7e31f7adcc5851ca06134705fcf3478210da45d35ad75ec181e1ce9ce345bb38"},
+ {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9448227b0df082e574c45c983fa5cd4bda7bfb11ea6b59def0940c1647be0c3c"},
+ {file = "brotlipy-0.7.0-cp35-cp35m-win32.whl", hash = "sha256:dc6c5ee0df9732a44d08edab32f8a616b769cc5a4155a12d2d010d248eb3fb07"},
+ {file = "brotlipy-0.7.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3c1d5e2cf945a46975bdb11a19257fa057b67591eb232f393d260e7246d9e571"},
+ {file = "brotlipy-0.7.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:2a80319ae13ea8dd60ecdc4f5ccf6da3ae64787765923256b62c598c5bba4121"},
+ {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2699945a0a992c04fc7dc7fa2f1d0575a2c8b4b769f2874a08e8eae46bef36ae"},
+ {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1ea4e578241504b58f2456a6c69952c88866c794648bdc74baee74839da61d44"},
+ {file = "brotlipy-0.7.0-cp36-cp36m-win32.whl", hash = "sha256:2e5c64522364a9ebcdf47c5744a5ddeb3f934742d31e61ebfbbc095460b47162"},
+ {file = "brotlipy-0.7.0-cp36-cp36m-win_amd64.whl", hash = "sha256:09ec3e125d16749b31c74f021aba809541b3564e5359f8c265cbae442810b41a"},
+ {file = "brotlipy-0.7.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:4e4638b49835d567d447a2cfacec109f9a777f219f071312268b351b6839436d"},
+ {file = "brotlipy-0.7.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5664fe14f3a613431db622172bad923096a303d3adce55536f4409c8e2eafba4"},
+ {file = "brotlipy-0.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1379347337dc3d20b2d61456d44ccce13e0625db2611c368023b4194d5e2477f"},
+ {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:22a53ccebcce2425e19f99682c12be510bf27bd75c9b77a1720db63047a77554"},
+ {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4bac11c1ffba9eaa2894ec958a44e7f17778b3303c2ee9f99c39fcc511c26668"},
+ {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:08a16ebe2ffc52f645c076f96b138f185e74e5d59b4a65e84af17d5997d82890"},
+ {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7b21341eab7c939214e457e24b265594067a6ad268305289148ebaf2dacef325"},
+ {file = "brotlipy-0.7.0-pp226-pp226u-macosx_10_10_x86_64.whl", hash = "sha256:786afc8c9bd67de8d31f46e408a3386331e126829114e4db034f91eacb05396d"},
+ {file = "brotlipy-0.7.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:890b973039ba26c3ad2e86e8908ab527ed64f9b1357f81a676604da8088e4bf9"},
+ {file = "brotlipy-0.7.0-pp37-pypy37_pp73-manylinux1_x86_64.whl", hash = "sha256:4864ac52c116ea3e3a844248a9c9fbebb8797891cbca55484ecb6eed3ebeba24"},
+ {file = "brotlipy-0.7.0.tar.gz", hash = "sha256:36def0b859beaf21910157b4c33eb3b06d8ce459c942102f16988cca6ea164df"},
+]
+cached-property = [
+ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
+ {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
+]
+cchardet = [
+ {file = "cchardet-2.1.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c6f70139aaf47ffb94d89db603af849b82efdf756f187cdd3e566e30976c519f"},
+ {file = "cchardet-2.1.7-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5a25f9577e9bebe1a085eec2d6fdd72b7a9dd680811bba652ea6090fb2ff472f"},
+ {file = "cchardet-2.1.7-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6b6397d8a32b976a333bdae060febd39ad5479817fabf489e5596a588ad05133"},
+ {file = "cchardet-2.1.7-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:228d2533987c450f39acf7548f474dd6814c446e9d6bd228e8f1d9a2d210f10b"},
+ {file = "cchardet-2.1.7-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:54341e7e1ba9dc0add4c9d23b48d3a94e2733065c13920e85895f944596f6150"},
+ {file = "cchardet-2.1.7-cp36-cp36m-win32.whl", hash = "sha256:eee4f5403dc3a37a1ca9ab87db32b48dc7e190ef84601068f45397144427cc5e"},
+ {file = "cchardet-2.1.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f86e0566cb61dc4397297696a4a1b30f6391b50bc52b4f073507a48466b6255a"},
+ {file = "cchardet-2.1.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:302aa443ae2526755d412c9631136bdcd1374acd08e34f527447f06f3c2ddb98"},
+ {file = "cchardet-2.1.7-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:70eeae8aaf61192e9b247cf28969faef00578becd2602526ecd8ae7600d25e0e"},
+ {file = "cchardet-2.1.7-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a39526c1c526843965cec589a6f6b7c2ab07e3e56dc09a7f77a2be6a6afa4636"},
+ {file = "cchardet-2.1.7-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b154effa12886e9c18555dfc41a110f601f08d69a71809c8d908be4b1ab7314f"},
+ {file = "cchardet-2.1.7-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:ec3eb5a9c475208cf52423524dcaf713c394393e18902e861f983c38eeb77f18"},
+ {file = "cchardet-2.1.7-cp37-cp37m-win32.whl", hash = "sha256:50ad671e8d6c886496db62c3bd68b8d55060688c655873aa4ce25ca6105409a1"},
+ {file = "cchardet-2.1.7-cp37-cp37m-win_amd64.whl", hash = "sha256:54d0b26fd0cd4099f08fb9c167600f3e83619abefeaa68ad823cc8ac1f7bcc0c"},
+ {file = "cchardet-2.1.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b59ddc615883835e03c26f81d5fc3671fab2d32035c87f50862de0da7d7db535"},
+ {file = "cchardet-2.1.7-cp38-cp38-manylinux1_i686.whl", hash = "sha256:27a9ba87c9f99e0618e1d3081189b1217a7d110e5c5597b0b7b7c3fedd1c340a"},
+ {file = "cchardet-2.1.7-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:90086e5645f8a1801350f4cc6cb5d5bf12d3fa943811bb08667744ec1ecc9ccd"},
+ {file = "cchardet-2.1.7-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:45456c59ec349b29628a3c6bfb86d818ec3a6fbb7eb72de4ff3bd4713681c0e3"},
+ {file = "cchardet-2.1.7-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f16517f3697569822c6d09671217fdeab61dfebc7acb5068634d6b0728b86c0b"},
+ {file = "cchardet-2.1.7-cp38-cp38-win32.whl", hash = "sha256:0b859069bbb9d27c78a2c9eb997e6f4b738db2d7039a03f8792b4058d61d1109"},
+ {file = "cchardet-2.1.7-cp38-cp38-win_amd64.whl", hash = "sha256:273699c4e5cd75377776501b72a7b291a988c6eec259c29505094553ee505597"},
+ {file = "cchardet-2.1.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48ba829badef61441e08805cfa474ccd2774be2ff44b34898f5854168c596d4d"},
+ {file = "cchardet-2.1.7-cp39-cp39-manylinux1_i686.whl", hash = "sha256:bd7f262f41fd9caf5a5f09207a55861a67af6ad5c66612043ed0f81c58cdf376"},
+ {file = "cchardet-2.1.7-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fdac1e4366d0579fff056d1280b8dc6348be964fda8ebb627c0269e097ab37fa"},
+ {file = "cchardet-2.1.7-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:80e6faae75ecb9be04a7b258dc4750d459529debb6b8dee024745b7b5a949a34"},
+ {file = "cchardet-2.1.7-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c96aee9ebd1147400e608a3eff97c44f49811f8904e5a43069d55603ac4d8c97"},
+ {file = "cchardet-2.1.7-cp39-cp39-win32.whl", hash = "sha256:2309ff8fc652b0fc3c0cff5dbb172530c7abb92fe9ba2417c9c0bcf688463c1c"},
+ {file = "cchardet-2.1.7-cp39-cp39-win_amd64.whl", hash = "sha256:24974b3e40fee9e7557bb352be625c39ec6f50bc2053f44a3d1191db70b51675"},
+ {file = "cchardet-2.1.7.tar.gz", hash = "sha256:c428b6336545053c2589f6caf24ea32276c6664cb86db817e03a94c60afa0eaf"},
+]
+certifi = [
+ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
+ {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+]
+cffi = [
+ {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
+ {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
+ {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
+ {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
+ {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
+ {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
+ {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
+ {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
+ {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
+ {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
+ {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
+ {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
+ {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
+ {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
+ {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
+ {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
+ {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
+ {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
+ {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
+ {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
+ {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
+ {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
+ {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
+ {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
+ {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
+ {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
+ {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
+ {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
+ {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
+ {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
+ {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
+ {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
+ {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+]
+cfgv = [
+ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"},
+ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"},
+]
+chardet = [
+ {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
+ {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
+]
+charset-normalizer = [
+ {file = "charset-normalizer-2.0.5.tar.gz", hash = "sha256:7098e7e862f6370a2a8d1a6398cd359815c45d12626267652c3f13dec58e2367"},
+ {file = "charset_normalizer-2.0.5-py3-none-any.whl", hash = "sha256:fa471a601dfea0f492e4f4fca035cd82155e65dc45c9b83bf4322dfab63755dd"},
+]
+click = [
+ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
+ {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+cytoolz = [
+ {file = "cytoolz-0.11.0-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:c50051c02b23823209d6b0e8f7b2b37371312da50ca78165871dc6fed7bd37df"},
+ {file = "cytoolz-0.11.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:140eaadcd86216d4a185db3a37396ee80dd2edc6e490ba37a3d7c1b17a124078"},
+ {file = "cytoolz-0.11.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:c183237f4f0bac53238588e3567c0287130dd9ed6b6b880579a5cca960a89f54"},
+ {file = "cytoolz-0.11.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:6cba0572e3ad187e0ea0ddd20bb9c6aad794c23d997ed2b2aa2bbd109fe61f9f"},
+ {file = "cytoolz-0.11.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c7ed490f7f5c069a5082b73803ff4595f12ed0eb6b52ffa5ffe15d532acb71ed"},
+ {file = "cytoolz-0.11.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2e7cbfec2681e8acfd0013e9581905f251455d411457a6f475ba1870d1685fc"},
+ {file = "cytoolz-0.11.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:596a40ce920dd6cdab42d3dec5a4e8bb0bf258bb79426a4ed7658a27c214941b"},
+ {file = "cytoolz-0.11.0-cp36-cp36m-win_amd64.whl", hash = "sha256:477f71b8b2c6fdd97aa3a421ba0cfd04b22ffed1b22dda3fea06db2756ee7097"},
+ {file = "cytoolz-0.11.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5692a100d657f9bc2fede44ff41649c0c577f251bc0bd06c699c177235a0f81c"},
+ {file = "cytoolz-0.11.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8893b54f8d8d1bbc5a22dc4989d9b3eb269dd5ee1247993158e1f9ae0fbb9c88"},
+ {file = "cytoolz-0.11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:84519cf4f63308b0ce39162b7a341367338953cd9fbf7edd335cbc44dcd321e9"},
+ {file = "cytoolz-0.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9963114029e78ddb626140cbb15b79ad0fd1563484b73fb29403a3d5bf3ed4"},
+ {file = "cytoolz-0.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c65635ad93bac9002e36d42603bd87514e8ea932910158054b409ceee05ff4fe"},
+ {file = "cytoolz-0.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6e95de2fe891075f71edb0a56701eeaae04d43f44470c24d45e89f1ea801e85"},
+ {file = "cytoolz-0.11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b4a3eb96eda360b14fa6c7d2ce6faf684319c051f9ea620b009cb28a2878ed32"},
+ {file = "cytoolz-0.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:d0fdf0186201f882274db95fc5644ef34bfb0593d9db23b7343b0e6c8c000a0a"},
+ {file = "cytoolz-0.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f85a8e164ebbe75e77a9c8a0b91bd2a3ceb5beeb0f1c180affe75318a41df98c"},
+ {file = "cytoolz-0.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1b6bb4dee54fe62306d7330639f57a0dbb612520516b97b1c9dea5bc506634"},
+ {file = "cytoolz-0.11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3159da30eaf214746215293fdba19b6b54af59b3b2ba979eb9e184c6c7a854d2"},
+ {file = "cytoolz-0.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:b61f23e9fa7cd5a87a503ab659f816858e2235926cd95b0c7e37403530d4a2d6"},
+ {file = "cytoolz-0.11.0.tar.gz", hash = "sha256:c64f3590c3eb40e1548f0d3c6b2ccde70493d0b8dc6cc7f9f3fec0bb3dcd4222"},
+]
+distlib = [
+ {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"},
+ {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"},
+]
+eth-abi = [
+ {file = "eth_abi-2.1.1-py3-none-any.whl", hash = "sha256:78df5d2758247a8f0766a7cfcea4575bcfe568c34a33e6d05a72c328a9040444"},
+ {file = "eth_abi-2.1.1.tar.gz", hash = "sha256:4bb1d87bb6605823379b07f6c02c8af45df01a27cc85bd6abb7cf1446ce7d188"},
+]
+eth-account = [
+ {file = "eth-account-0.5.5.tar.gz", hash = "sha256:60396fedde2546bb23d3b1a4f28a959387738c9906090d2fdd01b9e663eaa829"},
+ {file = "eth_account-0.5.5-py3-none-any.whl", hash = "sha256:e579a898a976ad3436e328036a0ac4bb36573561dd0773f717dba6a72c137a2c"},
+]
+eth-hash = [
+ {file = "eth-hash-0.3.2.tar.gz", hash = "sha256:3f40cecd5ead88184aa9550afc19d057f103728108c5102f592f8415949b5a76"},
+ {file = "eth_hash-0.3.2-py3-none-any.whl", hash = "sha256:de7385148a8e0237ba1240cddbc06d53f56731140f8593bdb8429306f6b42271"},
+]
+eth-keyfile = [
+ {file = "eth-keyfile-0.5.1.tar.gz", hash = "sha256:939540efb503380bc30d926833e6a12b22c6750de80feef3720d79e5a79de47d"},
+ {file = "eth_keyfile-0.5.1-py3-none-any.whl", hash = "sha256:70d734af17efdf929a90bb95375f43522be4ed80c3b9e0a8bca575fb11cd1159"},
+]
+eth-keys = [
+ {file = "eth-keys-0.3.3.tar.gz", hash = "sha256:a9a1e83e443bd369265b1a1b66dc30f6841bdbb3577ecd042e037b7b405b6cb0"},
+ {file = "eth_keys-0.3.3-py3-none-any.whl", hash = "sha256:412dd5c9732b8e92af40c9c77597f4661c57eba3897aaa55e527af56a8c5ab47"},
+]
+eth-rlp = [
+ {file = "eth-rlp-0.2.1.tar.gz", hash = "sha256:f016f980b0ed42ee7650ba6e4e4d3c4e9aa06d8b9c6825a36d3afe5aa0187a8b"},
+ {file = "eth_rlp-0.2.1-py3-none-any.whl", hash = "sha256:cc389ef8d7b6f76a98f90bcdbff1b8684b3a78f53d47e871191b50d4d6aee5a1"},
+]
+eth-typing = [
+ {file = "eth-typing-2.2.2.tar.gz", hash = "sha256:97ba0f83da7cf1d3668f6ed54983f21168076c552762bf5e06d4a20921877f3f"},
+ {file = "eth_typing-2.2.2-py3-none-any.whl", hash = "sha256:1140c7592321dbf10d6663c46f7e43eb0e6410b011b03f14b3df3eb1f76aa9bb"},
+]
+eth-utils = [
+ {file = "eth-utils-1.10.0.tar.gz", hash = "sha256:bf82762a46978714190b0370265a7148c954d3f0adaa31c6f085ea375e4c61af"},
+ {file = "eth_utils-1.10.0-py3-none-any.whl", hash = "sha256:74240a8c6f652d085ed3c85f5f1654203d2f10ff9062f83b3bad0a12ff321c7a"},
+]
+filelock = [
+ {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"},
+ {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"},
+]
+flake8 = [
+ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
+ {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
+]
+flake8-black = [
+ {file = "flake8-black-0.2.3.tar.gz", hash = "sha256:c199844bc1b559d91195ebe8620216f21ed67f2cc1ff6884294c91a0d2492684"},
+ {file = "flake8_black-0.2.3-py3-none-any.whl", hash = "sha256:cc080ba5b3773b69ba102b6617a00cc4ecbad8914109690cfda4d565ea435d96"},
+]
+flake8-bugbear = [
+ {file = "flake8-bugbear-21.9.1.tar.gz", hash = "sha256:2f60c8ce0dc53d51da119faab2d67dea978227f0f92ed3c44eb7d65fb2e06a96"},
+ {file = "flake8_bugbear-21.9.1-py36.py37.py38-none-any.whl", hash = "sha256:45bfdccfb9f2d8aa140e33cac8f46f1e38215c13d5aa8650e7e188d84e2f94c6"},
+]
+gql = [
+ {file = "gql-3.0.0a6.tar.gz", hash = "sha256:bdcbf60bc37b11d6d2f2ed271f69292c4e96d56df7000ba1dad52e487330bdce"},
+]
+graphql-core = [
+ {file = "graphql-core-3.1.6.tar.gz", hash = "sha256:e65975b6a13878f9113a1fa5320760585b522d139944e005936b1b8358d0651a"},
+ {file = "graphql_core-3.1.6-py3-none-any.whl", hash = "sha256:c78d09596d347e1cffd266c5384abfedf43ed1eae08729773bebb3d527fe5a14"},
+]
+hexbytes = [
+ {file = "hexbytes-0.2.2-py3-none-any.whl", hash = "sha256:ef53c37ea9f316fff86fcb1df057b4c6ba454da348083e972031bbf7bc9c3acc"},
+ {file = "hexbytes-0.2.2.tar.gz", hash = "sha256:a5881304d186e87578fb263a85317c808cf130e1d4b3d37d30142ab0f7898d03"},
+]
+identify = [
+ {file = "identify-2.2.14-py2.py3-none-any.whl", hash = "sha256:113a76a6ba614d2a3dd408b3504446bcfac0370da5995aa6a17fd7c6dffde02d"},
+ {file = "identify-2.2.14.tar.gz", hash = "sha256:32f465f3c48083f345ad29a9df8419a4ce0674bf4a8c3245191d65c83634bdbf"},
+]
+idna = [
+ {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
+ {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+]
+ipfshttpclient = [
+ {file = "ipfshttpclient-0.8.0a2-py3-none-any.whl", hash = "sha256:ce6bac0e3963c4ced74d7eb6978125362bb05bbe219088ca48f369ce14d3cc39"},
+ {file = "ipfshttpclient-0.8.0a2.tar.gz", hash = "sha256:0d80e95ee60b02c7d414e79bf81a36fc3c8fbab74265475c52f70b2620812135"},
+]
+isort = [
+ {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"},
+ {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"},
+]
+jsonschema = [
+ {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
+ {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+]
+lru-dict = [
+ {file = "lru-dict-1.1.7.tar.gz", hash = "sha256:45b81f67d75341d4433abade799a47e9c42a9e22a118531dcb5e549864032d7c"},
+]
+mccabe = [
+ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
+ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
+]
+multiaddr = [
+ {file = "multiaddr-0.0.9-py2.py3-none-any.whl", hash = "sha256:5c0f862cbcf19aada2a899f80ef896ddb2e85614e0c8f04dd287c06c69dac95b"},
+ {file = "multiaddr-0.0.9.tar.gz", hash = "sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf"},
+]
+multidict = [
+ {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
+ {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
+ {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
+ {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
+ {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
+ {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
+ {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
+ {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
+ {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
+ {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
+ {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
+ {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
+ {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
+ {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
+ {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
+ {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
+ {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+]
+mypy = [
+ {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"},
+ {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"},
+ {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"},
+ {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"},
+ {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"},
+ {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"},
+ {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"},
+ {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"},
+ {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"},
+ {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"},
+ {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"},
+ {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"},
+ {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"},
+ {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"},
+ {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"},
+ {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"},
+ {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"},
+ {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"},
+ {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"},
+ {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"},
+ {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"},
+ {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"},
+ {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"},
+]
+mypy-extensions = [
+ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
+netaddr = [
+ {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"},
+ {file = "netaddr-0.8.0.tar.gz", hash = "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"},
+]
+nodeenv = [
+ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"},
+ {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"},
+]
+parsimonious = [
+ {file = "parsimonious-0.8.1.tar.gz", hash = "sha256:3add338892d580e0cb3b1a39e4a1b427ff9f687858fdd61097053742391a9f6b"},
+]
+pathspec = [
+ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
+ {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
+]
+platformdirs = [
+ {file = "platformdirs-2.3.0-py3-none-any.whl", hash = "sha256:8003ac87717ae2c7ee1ea5a84a1a61e87f3fbd16eb5aadba194ea30a9019f648"},
+ {file = "platformdirs-2.3.0.tar.gz", hash = "sha256:15b056538719b1c94bdaccb29e5f81879c7f7f0f4a153f46086d155dffcd4f0f"},
+]
+pre-commit = [
+ {file = "pre_commit-2.15.0-py2.py3-none-any.whl", hash = "sha256:a4ed01000afcb484d9eb8d504272e642c4c4099bbad3a6b27e519bd6a3e928a6"},
+ {file = "pre_commit-2.15.0.tar.gz", hash = "sha256:3c25add78dbdfb6a28a651780d5c311ac40dd17f160eb3954a0c59da40a505a7"},
+]
+protobuf = [
+ {file = "protobuf-3.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9072cb18fca8998b77f969fb74d25a11d7f4a39a8b1ddc3cf76cd5abda8499cb"},
+ {file = "protobuf-3.18.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f589346b5b3f702c1d30e2343c9897e6c35e7bd495c10a0e17d11ecb5ee5bd06"},
+ {file = "protobuf-3.18.0-cp36-cp36m-win32.whl", hash = "sha256:93c077fd83879cf48f327a2491c24da447a09da6a7ab3cc311a6f5a61fcb5de0"},
+ {file = "protobuf-3.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3b5b81bb665aac548b413480f4e0d8c38a74bc4dea57835f288a3ce74f63dfe9"},
+ {file = "protobuf-3.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d11465040cadcea8ecf5f0b131af5099a9696f9d0bef6f88148b372bacc1c52d"},
+ {file = "protobuf-3.18.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:f6138462643adce0ed6e49007a63b7fd7dc4fda1ef4e15a70fcebe76c1407a71"},
+ {file = "protobuf-3.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877664b1b8d1e23553634f625e4e12aae4ff16cbbef473f8118c239d478f422a"},
+ {file = "protobuf-3.18.0-cp37-cp37m-win32.whl", hash = "sha256:5201333b7aa711965c5769b250f8565a9924e8e27f8b622bbc5e6847aeaab1b1"},
+ {file = "protobuf-3.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f3ecec3038c2fb4dad952d3d6cb9ca301999903a09e43794fb348da48f7577f"},
+ {file = "protobuf-3.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:17181fc0814655812aac108e755bd5185d71aa8d81bd241cec6e232c84097918"},
+ {file = "protobuf-3.18.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7646c20605fbee57e77fdbc4a90175538281b152f46ba17019916593f8062c2a"},
+ {file = "protobuf-3.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b0a5157f3a53043daf8eb7cfa1220b27a5a63dd6655dbd8e1e6f7b5dcd6347"},
+ {file = "protobuf-3.18.0-cp38-cp38-win32.whl", hash = "sha256:5730de255c95b3403eedd1a568eb28203b913b6192ff5a3fdc3ff30f37107a38"},
+ {file = "protobuf-3.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:9147565f93e6699d7512747766598afe63205f226ac7b61f47954974c9aab852"},
+ {file = "protobuf-3.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:568c049ff002a7523ed33fb612e6b97da002bf87ffb619a1fc3eadf2257a3b31"},
+ {file = "protobuf-3.18.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7e791a94db391ae22b3943fc88f6ba0e1f62b6ad58b33db7517df576c7834d23"},
+ {file = "protobuf-3.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42c04e66ec5a38ad2171639dc9860c2f9594668f709ea3a4a192acf7346853a7"},
+ {file = "protobuf-3.18.0-cp39-cp39-win32.whl", hash = "sha256:0a59ea8da307118372750e2fdfe0961622e675b8dd35e05c42384d618189a938"},
+ {file = "protobuf-3.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:f7c8193ec805324ff6024242b00f64a24b94d56b895f62bf28a9d72a228d4fca"},
+ {file = "protobuf-3.18.0-py2.py3-none-any.whl", hash = "sha256:615099e52e9fbc9fde00177267a94ca820ecf4e80093e390753568b7d8cb3c1a"},
+ {file = "protobuf-3.18.0.tar.gz", hash = "sha256:18b308946a592e245299391e53c01b5b8efc2794f49986e80f37d7b5e60a270f"},
+]
+py-ecc = [
+ {file = "py_ecc-5.2.0-py3-none-any.whl", hash = "sha256:525b95aae5bbc185baff7dbfdb9bbd14d2c9454a797457f3edc85fd14c2ad7a6"},
+ {file = "py_ecc-5.2.0.tar.gz", hash = "sha256:f0aabdc82813ecb2e75e0531e3850295ff1a96bedfba42f15b5bc7f39ced64ba"},
+]
+pycares = [
+ {file = "pycares-4.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db5a533111a3cfd481e7e4fb2bf8bef69f4fa100339803e0504dd5aecafb96a5"},
+ {file = "pycares-4.0.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:fdff88393c25016f417770d82678423fc7a56995abb2df3d2a1e55725db6977d"},
+ {file = "pycares-4.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0aa97f900a7ffb259be77d640006585e2a907b0cd4edeee0e85cf16605995d5a"},
+ {file = "pycares-4.0.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a34b0e3e693dceb60b8a1169668d606c75cb100ceba0a2df53c234a0eb067fbc"},
+ {file = "pycares-4.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7661d6bbd51a337e7373cb356efa8be9b4655fda484e068f9455e939aec8d54e"},
+ {file = "pycares-4.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:57315b8eb8fdbc56b3ad4932bc4b17132bb7c7fd2bd590f7fb84b6b522098aa9"},
+ {file = "pycares-4.0.0-cp36-cp36m-win32.whl", hash = "sha256:dca9dc58845a9d083f302732a3130c68ded845ad5d463865d464e53c75a3dd45"},
+ {file = "pycares-4.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c95c964d5dd307e104b44b193095c67bb6b10c9eda1ffe7d44ab7a9e84c476d9"},
+ {file = "pycares-4.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26e67e4f81c80a5955dcf6193f3d9bee3c491fc0056299b383b84d792252fba4"},
+ {file = "pycares-4.0.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cd3011ffd5e1ad55880f7256791dbab9c43ebeda260474a968f19cd0319e1aef"},
+ {file = "pycares-4.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1b959dd5921d207d759d421eece1b60416df33a7f862465739d5f2c363c2f523"},
+ {file = "pycares-4.0.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6f258c1b74c048a9501a25f732f11b401564005e5e3c18f1ca6cad0c3dc0fb19"},
+ {file = "pycares-4.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:b17ef48729786e62b574c6431f675f4cb02b27691b49e7428a605a50cd59c072"},
+ {file = "pycares-4.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:82b3259cb590ddd107a6d2dc52da2a2e9a986bf242e893d58c786af2f8191047"},
+ {file = "pycares-4.0.0-cp37-cp37m-win32.whl", hash = "sha256:4876fc790ae32832ae270c4a010a1a77e12ddf8d8e6ad70ad0b0a9d506c985f7"},
+ {file = "pycares-4.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f60c04c5561b1ddf85ca4e626943cc09d7fb684e1adb22abb632095415a40fd7"},
+ {file = "pycares-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:615406013cdcd1b445e5d1a551d276c6200b3abe77e534f8a7f7e1551208d14f"},
+ {file = "pycares-4.0.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6580aef5d1b29a88c3d72fe73c691eacfd454f86e74d3fdd18f4bad8e8def98b"},
+ {file = "pycares-4.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8ebb3ba0485f66cae8eed7ce3e9ed6f2c0bfd5e7319d5d0fbbb511064f17e1d4"},
+ {file = "pycares-4.0.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c5362b7690ca481440f6b98395ac6df06aa50518ccb183c560464d1e5e2ab5d4"},
+ {file = "pycares-4.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:eb60be66accc9a9ea1018b591a1f5800cba83491d07e9acc8c56bc6e6607ab54"},
+ {file = "pycares-4.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:44896d6e191a6b5a914dbe3aa7c748481bf6ad19a9df33c1e76f8f2dc33fc8f0"},
+ {file = "pycares-4.0.0-cp38-cp38-win32.whl", hash = "sha256:09b28fc7bc2cc05f7f69bf1636ddf46086e0a1837b62961e2092fcb40477320d"},
+ {file = "pycares-4.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4a5081e232c1d181883dcac4675807f3a6cf33911c4173fbea00c0523687ed4"},
+ {file = "pycares-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:103353577a6266a53e71bfee4cf83825f1401fefa60f0fb8bdec35f13be6a5f2"},
+ {file = "pycares-4.0.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:ad6caf580ee69806fc6534be93ddbb6e99bf94296d79ab351c37b2992b17abfd"},
+ {file = "pycares-4.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3d5e50c95849f6905d2a9dbf02ed03f82580173e3c5604a39e2ad054185631f1"},
+ {file = "pycares-4.0.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:53bc4f181b19576499b02cea4b45391e8dcbe30abd4cd01492f66bfc15615a13"},
+ {file = "pycares-4.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:d52f9c725d2a826d5ffa37681eb07ffb996bfe21788590ef257664a3898fc0b5"},
+ {file = "pycares-4.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3c7fb8d34ee11971c39acfaf98d0fac66725385ccef3bfe1b174c92b210e1aa4"},
+ {file = "pycares-4.0.0-cp39-cp39-win32.whl", hash = "sha256:e9773e07684a55f54657df05237267611a77b294ec3bacb5f851c4ffca38a465"},
+ {file = "pycares-4.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:38e54037f36c149146ff15f17a4a963fbdd0f9871d4a21cd94ff9f368140f57e"},
+ {file = "pycares-4.0.0.tar.gz", hash = "sha256:d0154fc5753b088758fbec9bc137e1b24bb84fc0c6a09725c8bac25a342311cd"},
+]
+pycodestyle = [
+ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"},
+ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"},
+]
+pycparser = [
+ {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
+ {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+]
+pycryptodome = [
+ {file = "pycryptodome-3.10.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1c5e1ca507de2ad93474be5cfe2bfa76b7cf039a1a32fc196f40935944871a06"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:6260e24d41149268122dd39d4ebd5941e9d107f49463f7e071fd397e29923b0c"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3f840c49d38986f6e17dbc0673d37947c88bc9d2d9dba1c01b979b36f8447db1"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:2dea65df54349cdfa43d6b2e8edb83f5f8d6861e5cf7b1fbc3e34c5694c85e27"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e61e363d9a5d7916f3a4ce984a929514c0df3daf3b1b2eb5e6edbb131ee771cf"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:2603c98ae04aac675fefcf71a6c87dc4bb74a75e9071ae3923bbc91a59f08d35"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-win32.whl", hash = "sha256:38661348ecb71476037f1e1f553159b80d256c00f6c0b00502acac891f7116d9"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-win_amd64.whl", hash = "sha256:1723ebee5561628ce96748501cdaa7afaa67329d753933296321f0be55358dce"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:77997519d8eb8a4adcd9a47b9cec18f9b323e296986528186c0e9a7a15d6a07e"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:99b2f3fc51d308286071d0953f92055504a6ffe829a832a9fc7a04318a7683dd"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e0a4d5933a88a2c98bbe19c0c722f5483dc628d7a38338ac2cb64a7dbd34064b"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d3d6958d53ad307df5e8469cc44474a75393a434addf20ecd451f38a72fe29b8"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:a8eb8b6ea09ec1c2535bf39914377bc8abcab2c7d30fa9225eb4fe412024e427"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:31c1df17b3dc5f39600a4057d7db53ac372f492c955b9b75dd439f5d8b460129"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:a3105a0eb63eacf98c2ecb0eb4aa03f77f40fbac2bdde22020bb8a536b226bb8"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:a92d5c414e8ee1249e850789052608f582416e82422502dc0ac8c577808a9067"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:60386d1d4cfaad299803b45a5bc2089696eaf6cdd56f9fc17479a6f89595cfc8"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:501ab36aae360e31d0ec370cf5ce8ace6cb4112060d099b993bc02b36ac83fb6"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc7489a50323a0df02378bc2fff86eb69d94cc5639914346c736be981c6a02e7"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-win32.whl", hash = "sha256:9b6f711b25e01931f1c61ce0115245a23cdc8b80bf8539ac0363bdcf27d649b6"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-win_amd64.whl", hash = "sha256:7fd519b89585abf57bf47d90166903ec7b43af4fe23c92273ea09e6336af5c07"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:09c1555a3fa450e7eaca41ea11cd00afe7c91fef52353488e65663777d8524e0"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:758949ca62690b1540dfb24ad773c6da9cd0e425189e83e39c038bbd52b8e438"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:e3bf558c6aeb49afa9f0c06cee7fb5947ee5a1ff3bd794b653d39926b49077fa"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-win32.whl", hash = "sha256:f977cdf725b20f6b8229b0c87acb98c7717e742ef9f46b113985303ae12a99da"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6d2df5223b12437e644ce0a3be7809471ffa71de44ccd28b02180401982594a6"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:98213ac2b18dc1969a47bc65a79a8fca02a414249d0c8635abb081c7f38c91b6"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:12222a5edc9ca4a29de15fbd5339099c4c26c56e13c2ceddf0b920794f26165d"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:6bbf7fee7b7948b29d7e71fcacf48bac0c57fb41332007061a933f2d996f9713"},
+ {file = "pycryptodome-3.10.1.tar.gz", hash = "sha256:3e2e3a06580c5f190df843cdb90ea28d61099cf4924334d5297a995de68e4673"},
+]
+pyflakes = [
+ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
+ {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
+]
+pyrsistent = [
+ {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
+ {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
+ {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
+ {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
+ {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
+ {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
+ {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
+ {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
+ {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
+ {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
+ {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
+ {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
+ {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
+ {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
+ {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
+ {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
+ {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
+ {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
+ {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
+ {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
+ {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+]
+python-decouple = [
+ {file = "python-decouple-3.4.tar.gz", hash = "sha256:2e5adb0263a4f963b58d7407c4760a2465d464ee212d733e2a2c179e54c08d8f"},
+ {file = "python_decouple-3.4-py3-none-any.whl", hash = "sha256:a8268466e6389a639a20deab9d880faee186eb1eb6a05e54375bdf158d691981"},
+]
+pywin32 = [
+ {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
+ {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
+ {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
+ {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
+ {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
+ {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
+ {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
+ {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
+ {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
+ {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+]
+pyyaml = [
+ {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
+ {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
+ {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
+ {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
+ {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
+ {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
+ {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+ {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
+ {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
+ {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
+ {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+ {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
+ {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
+ {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
+ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+]
+regex = [
+ {file = "regex-2021.8.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2"},
+ {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a"},
+ {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0"},
+ {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb"},
+ {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a"},
+ {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308"},
+ {file = "regex-2021.8.28-cp310-cp310-win32.whl", hash = "sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed"},
+ {file = "regex-2021.8.28-cp310-cp310-win_amd64.whl", hash = "sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8"},
+ {file = "regex-2021.8.28-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c"},
+ {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c"},
+ {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13"},
+ {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0"},
+ {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1"},
+ {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f"},
+ {file = "regex-2021.8.28-cp36-cp36m-win32.whl", hash = "sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354"},
+ {file = "regex-2021.8.28-cp36-cp36m-win_amd64.whl", hash = "sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645"},
+ {file = "regex-2021.8.28-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a"},
+ {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e"},
+ {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892"},
+ {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791"},
+ {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759"},
+ {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906"},
+ {file = "regex-2021.8.28-cp37-cp37m-win32.whl", hash = "sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a"},
+ {file = "regex-2021.8.28-cp37-cp37m-win_amd64.whl", hash = "sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc"},
+ {file = "regex-2021.8.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd"},
+ {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797"},
+ {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f"},
+ {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256"},
+ {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b"},
+ {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e"},
+ {file = "regex-2021.8.28-cp38-cp38-win32.whl", hash = "sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d"},
+ {file = "regex-2021.8.28-cp38-cp38-win_amd64.whl", hash = "sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2"},
+ {file = "regex-2021.8.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468"},
+ {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb"},
+ {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d"},
+ {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983"},
+ {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8"},
+ {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed"},
+ {file = "regex-2021.8.28-cp39-cp39-win32.whl", hash = "sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374"},
+ {file = "regex-2021.8.28-cp39-cp39-win_amd64.whl", hash = "sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73"},
+ {file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"},
+]
+requests = [
+ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
+ {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+]
+rlp = [
+ {file = "rlp-2.0.1-py2.py3-none-any.whl", hash = "sha256:52a57c9f53f03c88b189283734b397314288250cc4a3c4113e9e36e2ac6bdd16"},
+ {file = "rlp-2.0.1.tar.gz", hash = "sha256:665e8312750b3fc5f7002e656d05b9dcb6e93b6063df40d95c49ad90c19d1f0e"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+tenacity = [
+ {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"},
+ {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"},
+]
+toml = [
+ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
+ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
+]
+tomli = [
+ {file = "tomli-1.2.1-py3-none-any.whl", hash = "sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f"},
+ {file = "tomli-1.2.1.tar.gz", hash = "sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442"},
+]
+toolz = [
+ {file = "toolz-0.11.1-py3-none-any.whl", hash = "sha256:1bc473acbf1a1db4e72a1ce587be347450e8f08324908b8a266b486f408f04d5"},
+ {file = "toolz-0.11.1.tar.gz", hash = "sha256:c7a47921f07822fe534fb1c01c9931ab335a4390c782bd28c6bcc7c2f71f3fbf"},
+]
+typing-extensions = [
+ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+ {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+ {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+]
+urllib3 = [
+ {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
+ {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+]
+varint = [
+ {file = "varint-1.0.2.tar.gz", hash = "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"},
+]
+virtualenv = [
+ {file = "virtualenv-20.7.2-py2.py3-none-any.whl", hash = "sha256:e4670891b3a03eb071748c569a87cceaefbf643c5bac46d996c5a45c34aa0f06"},
+ {file = "virtualenv-20.7.2.tar.gz", hash = "sha256:9ef4e8ee4710826e98ff3075c9a4739e2cb1040de6a2a8d35db0055840dc96a0"},
+]
+web3 = [
+ {file = "web3-5.23.1-py3-none-any.whl", hash = "sha256:6e561fd5fdbcf9571b1de8b77b2d81997f77a691e32ad536d489a0732f1cf182"},
+ {file = "web3-5.23.1.tar.gz", hash = "sha256:e3bc899201c38859ae65b1905105628f70a0c1684a6fb76fa4dd5b1db4fc40b0"},
+]
+websockets = [
+ {file = "websockets-9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314"},
+ {file = "websockets-9.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58"},
+ {file = "websockets-9.1-cp36-cp36m-win32.whl", hash = "sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a"},
+ {file = "websockets-9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b"},
+ {file = "websockets-9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25"},
+ {file = "websockets-9.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2"},
+ {file = "websockets-9.1-cp37-cp37m-win32.whl", hash = "sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a"},
+ {file = "websockets-9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857"},
+ {file = "websockets-9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe"},
+ {file = "websockets-9.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0"},
+ {file = "websockets-9.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec"},
+ {file = "websockets-9.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc"},
+ {file = "websockets-9.1-cp38-cp38-win32.whl", hash = "sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e"},
+ {file = "websockets-9.1-cp38-cp38-win_amd64.whl", hash = "sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077"},
+ {file = "websockets-9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2"},
+ {file = "websockets-9.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d"},
+ {file = "websockets-9.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135"},
+ {file = "websockets-9.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd"},
+ {file = "websockets-9.1-cp39-cp39-win32.whl", hash = "sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20"},
+ {file = "websockets-9.1-cp39-cp39-win_amd64.whl", hash = "sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0"},
+ {file = "websockets-9.1.tar.gz", hash = "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3"},
+]
+yarl = [
+ {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
+ {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
+ {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
+ {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
+ {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
+ {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
+ {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
+ {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
+ {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
+ {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
+ {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
+ {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
+ {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
+ {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
+ {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
+ {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
+ {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+]
diff --git a/proto/__init__.py b/proto/__init__.py
deleted file mode 100644
index 125ab11..0000000
--- a/proto/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from pathlib import Path
-
-from sys import path
-
-# https://github.com/protocolbuffers/protobuf/issues/1491
-path.append(str(Path(__file__).parent))
diff --git a/proto/eth/ext/options.proto b/proto/eth/ext/options.proto
deleted file mode 100644
index 63ab6fe..0000000
--- a/proto/eth/ext/options.proto
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/ext/options.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-
-package ethereum.eth.ext;
-
-import "google/protobuf/descriptor.proto";
-
-option csharp_namespace = "Ethereum.Eth.ext";
-option go_package = "github.com/prysmaticlabs/ethereumapis/eth/ext";
-option java_multiple_files = true;
-option java_outer_classname = "OptionsProto";
-option java_package = "org.ethereum.eth.ext";
-option php_namespace = "Ethereum\\Eth\\ext";
-
-extend google.protobuf.FieldOptions {
- string cast_type = 50000;
- string ssz_size = 50001;
- string ssz_max = 50002;
- string spec_name = 50003;
-}
diff --git a/proto/eth/ext/options_pb2.py b/proto/eth/ext/options_pb2.py
deleted file mode 100644
index e887269..0000000
--- a/proto/eth/ext/options_pb2.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/ext/options.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/ext/options.proto',
- package='ethereum.eth.ext',
- syntax='proto3',
- serialized_options=b'\n\024org.ethereum.eth.extB\014OptionsProtoP\001Z-github.com/prysmaticlabs/ethereumapis/eth/ext\252\002\020Ethereum.Eth.ext\312\002\020Ethereum\\Eth\\ext',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x15\x65th/ext/options.proto\x12\x10\x65thereum.eth.ext\x1a google/protobuf/descriptor.proto:2\n\tcast_type\x12\x1d.google.protobuf.FieldOptions\x18\xd0\x86\x03 \x01(\t:1\n\x08ssz_size\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\t:0\n\x07ssz_max\x12\x1d.google.protobuf.FieldOptions\x18\xd2\x86\x03 \x01(\t:2\n\tspec_name\x12\x1d.google.protobuf.FieldOptions\x18\xd3\x86\x03 \x01(\tB{\n\x14org.ethereum.eth.extB\x0cOptionsProtoP\x01Z-github.com/prysmaticlabs/ethereumapis/eth/ext\xaa\x02\x10\x45thereum.Eth.ext\xca\x02\x10\x45thereum\\Eth\\extb\x06proto3'
- ,
- dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,])
-
-
-CAST_TYPE_FIELD_NUMBER = 50000
-cast_type = _descriptor.FieldDescriptor(
- name='cast_type', full_name='ethereum.eth.ext.cast_type', index=0,
- number=50000, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=True, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)
-SSZ_SIZE_FIELD_NUMBER = 50001
-ssz_size = _descriptor.FieldDescriptor(
- name='ssz_size', full_name='ethereum.eth.ext.ssz_size', index=1,
- number=50001, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=True, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)
-SSZ_MAX_FIELD_NUMBER = 50002
-ssz_max = _descriptor.FieldDescriptor(
- name='ssz_max', full_name='ethereum.eth.ext.ssz_max', index=2,
- number=50002, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=True, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)
-SPEC_NAME_FIELD_NUMBER = 50003
-spec_name = _descriptor.FieldDescriptor(
- name='spec_name', full_name='ethereum.eth.ext.spec_name', index=3,
- number=50003, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=True, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)
-
-DESCRIPTOR.extensions_by_name['cast_type'] = cast_type
-DESCRIPTOR.extensions_by_name['ssz_size'] = ssz_size
-DESCRIPTOR.extensions_by_name['ssz_max'] = ssz_max
-DESCRIPTOR.extensions_by_name['spec_name'] = spec_name
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(cast_type)
-google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(ssz_size)
-google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(ssz_max)
-google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(spec_name)
-
-DESCRIPTOR._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/attestation.proto b/proto/eth/v1alpha1/attestation.proto
deleted file mode 100644
index b55213e..0000000
--- a/proto/eth/v1alpha1/attestation.proto
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/v1alpha1/attestation.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-package ethereum.eth.v1alpha1;
-
-import "eth/ext/options.proto";
-
-option csharp_namespace = "Ethereum.Eth.v1alpha1";
-option go_package = "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth";
-option java_multiple_files = true;
-option java_outer_classname = "AttestationProto";
-option java_package = "org.ethereum.eth.v1alpha1";
-option php_namespace = "Ethereum\\Eth\\v1alpha1";
-
-message Attestation {
- // A bitfield representation of validator indices that have voted exactly
- // the same vote and have been aggregated into this attestation.
- bytes aggregation_bits = 1 [(ethereum.eth.ext.ssz_max) = "2048", (ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/go-bitfield.Bitlist"];
-
- AttestationData data = 2;
-
- // 96 byte BLS aggregate signature.
- bytes signature = 3 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-message AggregateAttestationAndProof {
- // The aggregator index that submitted this aggregated attestation and proof.
- uint64 aggregator_index = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // The aggregated attestation that was submitted.
- Attestation aggregate = 3;
-
- // 96 byte selection proof signed by the aggregator, which is the signature of the slot to aggregate.
- bytes selection_proof = 2 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-message SignedAggregateAttestationAndProof {
- // The aggregated attestation and selection proof itself.
- AggregateAttestationAndProof message = 1;
-
- // 96 byte BLS aggregate signature signed by the aggregator over the message.
- bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-message AttestationData {
- // Attestation data includes information on Casper the Friendly Finality Gadget's votes
- // See: https://arxiv.org/pdf/1710.09437.pdf
-
- // Slot of the attestation attesting for.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // The committee index that submitted this attestation.
- uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
-
- // 32 byte root of the LMD GHOST block vote.
- bytes beacon_block_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // The most recent justified checkpoint in the beacon state
- Checkpoint source = 4;
-
- // The checkpoint attempting to be justified for the current epoch and its epoch boundary block
- Checkpoint target = 5;
-}
-
-message Checkpoint {
- // A checkpoint is every epoch's first slot. The goal of Casper FFG
- // is to link the check points together for justification and finalization.
-
- // Epoch the checkpoint references.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Block root of the checkpoint references.
- bytes root = 2 [(ethereum.eth.ext.ssz_size) = "32"];
-}
\ No newline at end of file
diff --git a/proto/eth/v1alpha1/attestation_pb2.py b/proto/eth/v1alpha1/attestation_pb2.py
deleted file mode 100644
index 3b68a14..0000000
--- a/proto/eth/v1alpha1/attestation_pb2.py
+++ /dev/null
@@ -1,318 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/v1alpha1/attestation.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from eth.ext import options_pb2 as eth_dot_ext_dot_options__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/v1alpha1/attestation.proto',
- package='ethereum.eth.v1alpha1',
- syntax='proto3',
- serialized_options=b'\n\031org.ethereum.eth.v1alpha1B\020AttestationProtoP\001Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\252\002\025Ethereum.Eth.v1alpha1\312\002\025Ethereum\\Eth\\v1alpha1',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x1e\x65th/v1alpha1/attestation.proto\x12\x15\x65thereum.eth.v1alpha1\x1a\x15\x65th/ext/options.proto\"\xb2\x01\n\x0b\x41ttestation\x12R\n\x10\x61ggregation_bits\x18\x01 \x01(\x0c\x42\x38\x92\xb5\x18\x04\x32\x30\x34\x38\x82\xb5\x18,github.com/prysmaticlabs/go-bitfield.Bitlist\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.ethereum.eth.v1alpha1.AttestationData\x12\x19\n\tsignature\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\xc8\x01\n\x1c\x41ggregateAttestationAndProof\x12P\n\x10\x61ggregator_index\x18\x01 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x35\n\taggregate\x18\x03 \x01(\x0b\x32\".ethereum.eth.v1alpha1.Attestation\x12\x1f\n\x0fselection_proof\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\x85\x01\n\"SignedAggregateAttestationAndProof\x12\x44\n\x07message\x18\x01 \x01(\x0b\x32\x33.ethereum.eth.v1alpha1.AggregateAttestationAndProof\x12\x19\n\tsignature\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\xa7\x02\n\x0f\x41ttestationData\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12O\n\x0f\x63ommittee_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\x12!\n\x11\x62\x65\x61\x63on_block_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x31\n\x06source\x18\x04 \x01(\x0b\x32!.ethereum.eth.v1alpha1.Checkpoint\x12\x31\n\x06target\x18\x05 \x01(\x0b\x32!.ethereum.eth.v1alpha1.Checkpoint\"`\n\nCheckpoint\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x14\n\x04root\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x42\x97\x01\n\x19org.ethereum.eth.v1alpha1B\x10\x41ttestationProtoP\x01Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\xaa\x02\x15\x45thereum.Eth.v1alpha1\xca\x02\x15\x45thereum\\Eth\\v1alpha1b\x06proto3'
- ,
- dependencies=[eth_dot_ext_dot_options__pb2.DESCRIPTOR,])
-
-
-
-
-_ATTESTATION = _descriptor.Descriptor(
- name='Attestation',
- full_name='ethereum.eth.v1alpha1.Attestation',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='aggregation_bits', full_name='ethereum.eth.v1alpha1.Attestation.aggregation_bits', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\0042048\202\265\030,github.com/prysmaticlabs/go-bitfield.Bitlist', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='ethereum.eth.v1alpha1.Attestation.data', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.Attestation.signature', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=81,
- serialized_end=259,
-)
-
-
-_AGGREGATEATTESTATIONANDPROOF = _descriptor.Descriptor(
- name='AggregateAttestationAndProof',
- full_name='ethereum.eth.v1alpha1.AggregateAttestationAndProof',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='aggregator_index', full_name='ethereum.eth.v1alpha1.AggregateAttestationAndProof.aggregator_index', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='aggregate', full_name='ethereum.eth.v1alpha1.AggregateAttestationAndProof.aggregate', index=1,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='selection_proof', full_name='ethereum.eth.v1alpha1.AggregateAttestationAndProof.selection_proof', index=2,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=262,
- serialized_end=462,
-)
-
-
-_SIGNEDAGGREGATEATTESTATIONANDPROOF = _descriptor.Descriptor(
- name='SignedAggregateAttestationAndProof',
- full_name='ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='message', full_name='ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof.message', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof.signature', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=465,
- serialized_end=598,
-)
-
-
-_ATTESTATIONDATA = _descriptor.Descriptor(
- name='AttestationData',
- full_name='ethereum.eth.v1alpha1.AttestationData',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.AttestationData.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_index', full_name='ethereum.eth.v1alpha1.AttestationData.committee_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='beacon_block_root', full_name='ethereum.eth.v1alpha1.AttestationData.beacon_block_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='source', full_name='ethereum.eth.v1alpha1.AttestationData.source', index=3,
- number=4, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='target', full_name='ethereum.eth.v1alpha1.AttestationData.target', index=4,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=601,
- serialized_end=896,
-)
-
-
-_CHECKPOINT = _descriptor.Descriptor(
- name='Checkpoint',
- full_name='ethereum.eth.v1alpha1.Checkpoint',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.Checkpoint.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='root', full_name='ethereum.eth.v1alpha1.Checkpoint.root', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=898,
- serialized_end=994,
-)
-
-_ATTESTATION.fields_by_name['data'].message_type = _ATTESTATIONDATA
-_AGGREGATEATTESTATIONANDPROOF.fields_by_name['aggregate'].message_type = _ATTESTATION
-_SIGNEDAGGREGATEATTESTATIONANDPROOF.fields_by_name['message'].message_type = _AGGREGATEATTESTATIONANDPROOF
-_ATTESTATIONDATA.fields_by_name['source'].message_type = _CHECKPOINT
-_ATTESTATIONDATA.fields_by_name['target'].message_type = _CHECKPOINT
-DESCRIPTOR.message_types_by_name['Attestation'] = _ATTESTATION
-DESCRIPTOR.message_types_by_name['AggregateAttestationAndProof'] = _AGGREGATEATTESTATIONANDPROOF
-DESCRIPTOR.message_types_by_name['SignedAggregateAttestationAndProof'] = _SIGNEDAGGREGATEATTESTATIONANDPROOF
-DESCRIPTOR.message_types_by_name['AttestationData'] = _ATTESTATIONDATA
-DESCRIPTOR.message_types_by_name['Checkpoint'] = _CHECKPOINT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Attestation = _reflection.GeneratedProtocolMessageType('Attestation', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTATION,
- '__module__' : 'eth.v1alpha1.attestation_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Attestation)
- })
-_sym_db.RegisterMessage(Attestation)
-
-AggregateAttestationAndProof = _reflection.GeneratedProtocolMessageType('AggregateAttestationAndProof', (_message.Message,), {
- 'DESCRIPTOR' : _AGGREGATEATTESTATIONANDPROOF,
- '__module__' : 'eth.v1alpha1.attestation_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AggregateAttestationAndProof)
- })
-_sym_db.RegisterMessage(AggregateAttestationAndProof)
-
-SignedAggregateAttestationAndProof = _reflection.GeneratedProtocolMessageType('SignedAggregateAttestationAndProof', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDAGGREGATEATTESTATIONANDPROOF,
- '__module__' : 'eth.v1alpha1.attestation_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof)
- })
-_sym_db.RegisterMessage(SignedAggregateAttestationAndProof)
-
-AttestationData = _reflection.GeneratedProtocolMessageType('AttestationData', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTATIONDATA,
- '__module__' : 'eth.v1alpha1.attestation_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttestationData)
- })
-_sym_db.RegisterMessage(AttestationData)
-
-Checkpoint = _reflection.GeneratedProtocolMessageType('Checkpoint', (_message.Message,), {
- 'DESCRIPTOR' : _CHECKPOINT,
- '__module__' : 'eth.v1alpha1.attestation_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Checkpoint)
- })
-_sym_db.RegisterMessage(Checkpoint)
-
-
-DESCRIPTOR._options = None
-_ATTESTATION.fields_by_name['aggregation_bits']._options = None
-_ATTESTATION.fields_by_name['signature']._options = None
-_AGGREGATEATTESTATIONANDPROOF.fields_by_name['aggregator_index']._options = None
-_AGGREGATEATTESTATIONANDPROOF.fields_by_name['selection_proof']._options = None
-_SIGNEDAGGREGATEATTESTATIONANDPROOF.fields_by_name['signature']._options = None
-_ATTESTATIONDATA.fields_by_name['slot']._options = None
-_ATTESTATIONDATA.fields_by_name['committee_index']._options = None
-_ATTESTATIONDATA.fields_by_name['beacon_block_root']._options = None
-_CHECKPOINT.fields_by_name['epoch']._options = None
-_CHECKPOINT.fields_by_name['root']._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/beacon_block.proto b/proto/eth/v1alpha1/beacon_block.proto
deleted file mode 100644
index 55728ee..0000000
--- a/proto/eth/v1alpha1/beacon_block.proto
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/v1alpha1/beacon_block.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-package ethereum.eth.v1alpha1;
-
-import "eth/ext/options.proto";
-import "eth/v1alpha1/attestation.proto";
-
-// The Ethereum 2.0 beacon block. The message does not contain a validator signature.
-message BeaconBlock {
- // Beacon chain slot that this block represents.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Validator index of the validator that proposed the block header.
- uint64 proposer_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 32 byte root of the parent block.
- bytes parent_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // 32 byte root of the resulting state after processing this block.
- bytes state_root = 4 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // The block body itself.
- BeaconBlockBody body = 5;
-}
-
-// The signed version of beacon block.
-message SignedBeaconBlock {
- // The unsigned beacon block itself.
- BeaconBlock block = 1;
-
- // 96 byte BLS signature from the validator that produced this block.
- bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-// The block body of an Ethereum 2.0 beacon block.
-message BeaconBlockBody {
- // The validators RANDAO reveal 96 byte value.
- bytes randao_reveal = 1 [(ethereum.eth.ext.ssz_size) = "96"];
-
- // A reference to the Ethereum 1.x chain.
- Eth1Data eth1_data = 2;
-
- // 32 byte field of arbitrary data. This field may contain any data and
- // is not used for anything other than a fun message.
- bytes graffiti = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // Block operations
- // Refer to spec constants at https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/0_beacon-chain.md#max-operations-per-block
-
- // At most MAX_PROPOSER_SLASHINGS.
- repeated ProposerSlashing proposer_slashings = 4 [(ethereum.eth.ext.ssz_max) = "16"];
-
- // At most MAX_ATTESTER_SLASHINGS.
- repeated AttesterSlashing attester_slashings = 5 [(ethereum.eth.ext.ssz_max) = "2"];
-
- // At most MAX_ATTESTATIONS.
- repeated Attestation attestations = 6 [(ethereum.eth.ext.ssz_max) = "128"];
-
- // At most MAX_DEPOSITS.
- repeated Deposit deposits = 7 [(ethereum.eth.ext.ssz_max) = "16"];
-
- // At most MAX_VOLUNTARY_EXITS.
- repeated SignedVoluntaryExit voluntary_exits = 8 [(ethereum.eth.ext.ssz_max) = "16"];
-}
-
-// Proposer slashings are proofs that a slashable offense has been committed by
-// proposing two conflicting blocks from the same validator.
-message ProposerSlashing {
- // First conflicting signed block header.
- SignedBeaconBlockHeader header_1 = 2;
-
- // Second conflicting signed block header.
- SignedBeaconBlockHeader header_2 = 3;
-}
-
-// Attestor slashings are proofs that a slashable offense has been committed by
-// attestating to two conflicting pieces of information by the same validator.
-message AttesterSlashing {
- // First conflicting attestation.
- IndexedAttestation attestation_1 = 1;
-
- // Second conflicting attestation.
- IndexedAttestation attestation_2 = 2;
-}
-
-// Deposit into the Ethereum 2.0 from the Ethereum 1.x deposit contract.
-message Deposit {
- // DepositData that is encoded into a deposit signature.
- message Data {
- // 48 byte BLS public key of the validator.
- bytes public_key = 1 [(ethereum.eth.ext.ssz_size) = "48", (ethereum.eth.ext.spec_name) = "pubkey"];
-
- // A 32 byte hash of the withdrawal address public key.
- bytes withdrawal_credentials = 2 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // Deposit amount in gwei.
- uint64 amount = 3;
-
- // 96 byte signature from the validators public key.
- bytes signature = 4 [(ethereum.eth.ext.ssz_size) = "96"];
- }
- // 32 byte roots in the deposit tree branch.
- repeated bytes proof = 1 [(ethereum.eth.ext.ssz_size) = "33,32"];
-
- Data data = 2;
-}
-
-// A message that represents a validator signaling that they want to voluntarily
-// withdraw from the active validator set. The message does not contain a
-// validator signature.
-message VoluntaryExit {
- // The epoch on when exit request becomes valid.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Index of the exiting validator.
- uint64 validator_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-// The signed version of voluntary exit.
-message SignedVoluntaryExit {
- // The unsigned voluntary exit itself.
- VoluntaryExit exit = 1;
-
- // Validator's 96 byte signature
- bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-// Eth1Data represents references to the Ethereum 1.x deposit contract.
-message Eth1Data {
- // The 32 byte deposit tree root for the last deposit included in this
- // block.
- bytes deposit_root = 1 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // The total number of deposits included in the beacon chain since genesis
- // including the deposits in this block.
- uint64 deposit_count = 2;
-
- // The 32 byte block hash of the Ethereum 1.x block considered for deposit
- // inclusion.
- bytes block_hash = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-// A beacon block header is essentially a beacon block with only a reference to
-// the beacon body as a 32 byte merkle tree root. This type of message is more
-// lightweight than a full beacon block. The message does not contain
-// a validator signature.
-message BeaconBlockHeader {
- // Beacon chain slot that this block represents.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Validator index of the validator that proposed the block header.
- uint64 proposer_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 32 byte merkle tree root of the parent ssz encoded block.
- bytes parent_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // 32 byte merkle tree root of the resulting ssz encoded state after processing this block.
- bytes state_root = 4 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // 32 byte merkle tree root of the ssz encoded block body.
- bytes body_root = 5 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message SignedBeaconBlockHeader {
- // The unsigned beacon block header itself.
- BeaconBlockHeader header = 1;
-
- // 96 byte BLS signature from the validator that produced this block header.
- bytes signature = 2 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-message IndexedAttestation {
- repeated uint64 attesting_indices = 1 [(ethereum.eth.ext.ssz_max) = "2048"];
-
- AttestationData data = 2;
-
- // 96 bytes aggregate signature.
- bytes signature = 3 [(ethereum.eth.ext.ssz_size) = "96"];
-}
\ No newline at end of file
diff --git a/proto/eth/v1alpha1/beacon_block_pb2.py b/proto/eth/v1alpha1/beacon_block_pb2.py
deleted file mode 100644
index 0328b89..0000000
--- a/proto/eth/v1alpha1/beacon_block_pb2.py
+++ /dev/null
@@ -1,801 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/v1alpha1/beacon_block.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from eth.ext import options_pb2 as eth_dot_ext_dot_options__pb2
-from eth.v1alpha1 import attestation_pb2 as eth_dot_v1alpha1_dot_attestation__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/v1alpha1/beacon_block.proto',
- package='ethereum.eth.v1alpha1',
- syntax='proto3',
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x1f\x65th/v1alpha1/beacon_block.proto\x12\x15\x65thereum.eth.v1alpha1\x1a\x15\x65th/ext/options.proto\x1a\x1e\x65th/v1alpha1/attestation.proto\"\x88\x02\n\x0b\x42\x65\x61\x63onBlock\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12N\n\x0eproposer_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x1b\n\x0bparent_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x1a\n\nstate_root\x18\x04 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x34\n\x04\x62ody\x18\x05 \x01(\x0b\x32&.ethereum.eth.v1alpha1.BeaconBlockBody\"a\n\x11SignedBeaconBlock\x12\x31\n\x05\x62lock\x18\x01 \x01(\x0b\x32\".ethereum.eth.v1alpha1.BeaconBlock\x12\x19\n\tsignature\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\xe1\x03\n\x0f\x42\x65\x61\x63onBlockBody\x12\x1d\n\rrandao_reveal\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\x12\x32\n\teth1_data\x18\x02 \x01(\x0b\x32\x1f.ethereum.eth.v1alpha1.Eth1Data\x12\x18\n\x08graffiti\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12K\n\x12proposer_slashings\x18\x04 \x03(\x0b\x32\'.ethereum.eth.v1alpha1.ProposerSlashingB\x06\x92\xb5\x18\x02\x31\x36\x12J\n\x12\x61ttester_slashings\x18\x05 \x03(\x0b\x32\'.ethereum.eth.v1alpha1.AttesterSlashingB\x05\x92\xb5\x18\x01\x32\x12\x41\n\x0c\x61ttestations\x18\x06 \x03(\x0b\x32\".ethereum.eth.v1alpha1.AttestationB\x07\x92\xb5\x18\x03\x31\x32\x38\x12\x38\n\x08\x64\x65posits\x18\x07 \x03(\x0b\x32\x1e.ethereum.eth.v1alpha1.DepositB\x06\x92\xb5\x18\x02\x31\x36\x12K\n\x0fvoluntary_exits\x18\x08 \x03(\x0b\x32*.ethereum.eth.v1alpha1.SignedVoluntaryExitB\x06\x92\xb5\x18\x02\x31\x36\"\x96\x01\n\x10ProposerSlashing\x12@\n\x08header_1\x18\x02 \x01(\x0b\x32..ethereum.eth.v1alpha1.SignedBeaconBlockHeader\x12@\n\x08header_2\x18\x03 \x01(\x0b\x32..ethereum.eth.v1alpha1.SignedBeaconBlockHeader\"\x96\x01\n\x10\x41ttesterSlashing\x12@\n\rattestation_1\x18\x01 \x01(\x0b\x32).ethereum.eth.v1alpha1.IndexedAttestation\x12@\n\rattestation_2\x18\x02 \x01(\x0b\x32).ethereum.eth.v1alpha1.IndexedAttestation\"\xd7\x01\n\x07\x44\x65posit\x12\x18\n\x05proof\x18\x01 \x03(\x0c\x42\t\x8a\xb5\x18\x05\x33\x33,32\x12\x31\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32#.ethereum.eth.v1alpha1.Deposit.Data\x1a\x7f\n\x04\x44\x61ta\x12$\n\npublic_key\x18\x01 \x01(\x0c\x42\x10\x8a\xb5\x18\x02\x34\x38\x9a\xb5\x18\x06pubkey\x12&\n\x16withdrawal_credentials\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x04\x12\x19\n\tsignature\x18\x04 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\x9e\x01\n\rVoluntaryExit\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12O\n\x0fvalidator_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"d\n\x13SignedVoluntaryExit\x12\x32\n\x04\x65xit\x18\x01 \x01(\x0b\x32$.ethereum.eth.v1alpha1.VoluntaryExit\x12\x19\n\tsignature\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"[\n\x08\x45th1Data\x12\x1c\n\x0c\x64\x65posit_root\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x15\n\rdeposit_count\x18\x02 \x01(\x04\x12\x1a\n\nblock_hash\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"\xf3\x01\n\x11\x42\x65\x61\x63onBlockHeader\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12N\n\x0eproposer_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x1b\n\x0bparent_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x1a\n\nstate_root\x18\x04 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x19\n\tbody_root\x18\x05 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"n\n\x17SignedBeaconBlockHeader\x12\x38\n\x06header\x18\x01 \x01(\x0b\x32(.ethereum.eth.v1alpha1.BeaconBlockHeader\x12\x19\n\tsignature\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"\x8a\x01\n\x12IndexedAttestation\x12#\n\x11\x61ttesting_indices\x18\x01 \x03(\x04\x42\x08\x92\xb5\x18\x04\x32\x30\x34\x38\x12\x34\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32&.ethereum.eth.v1alpha1.AttestationData\x12\x19\n\tsignature\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\x62\x06proto3'
- ,
- dependencies=[eth_dot_ext_dot_options__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_attestation__pb2.DESCRIPTOR,])
-
-
-
-
-_BEACONBLOCK = _descriptor.Descriptor(
- name='BeaconBlock',
- full_name='ethereum.eth.v1alpha1.BeaconBlock',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.BeaconBlock.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='proposer_index', full_name='ethereum.eth.v1alpha1.BeaconBlock.proposer_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='parent_root', full_name='ethereum.eth.v1alpha1.BeaconBlock.parent_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='state_root', full_name='ethereum.eth.v1alpha1.BeaconBlock.state_root', index=3,
- number=4, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='body', full_name='ethereum.eth.v1alpha1.BeaconBlock.body', index=4,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=114,
- serialized_end=378,
-)
-
-
-_SIGNEDBEACONBLOCK = _descriptor.Descriptor(
- name='SignedBeaconBlock',
- full_name='ethereum.eth.v1alpha1.SignedBeaconBlock',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='block', full_name='ethereum.eth.v1alpha1.SignedBeaconBlock.block', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.SignedBeaconBlock.signature', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=380,
- serialized_end=477,
-)
-
-
-_BEACONBLOCKBODY = _descriptor.Descriptor(
- name='BeaconBlockBody',
- full_name='ethereum.eth.v1alpha1.BeaconBlockBody',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='randao_reveal', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.randao_reveal', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='eth1_data', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.eth1_data', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='graffiti', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.graffiti', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='proposer_slashings', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.proposer_slashings', index=3,
- number=4, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\00216', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='attester_slashings', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.attester_slashings', index=4,
- number=5, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\0012', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='attestations', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.attestations', index=5,
- number=6, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\003128', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='deposits', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.deposits', index=6,
- number=7, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\00216', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='voluntary_exits', full_name='ethereum.eth.v1alpha1.BeaconBlockBody.voluntary_exits', index=7,
- number=8, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\00216', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=480,
- serialized_end=961,
-)
-
-
-_PROPOSERSLASHING = _descriptor.Descriptor(
- name='ProposerSlashing',
- full_name='ethereum.eth.v1alpha1.ProposerSlashing',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='header_1', full_name='ethereum.eth.v1alpha1.ProposerSlashing.header_1', index=0,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='header_2', full_name='ethereum.eth.v1alpha1.ProposerSlashing.header_2', index=1,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=964,
- serialized_end=1114,
-)
-
-
-_ATTESTERSLASHING = _descriptor.Descriptor(
- name='AttesterSlashing',
- full_name='ethereum.eth.v1alpha1.AttesterSlashing',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attestation_1', full_name='ethereum.eth.v1alpha1.AttesterSlashing.attestation_1', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='attestation_2', full_name='ethereum.eth.v1alpha1.AttesterSlashing.attestation_2', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1117,
- serialized_end=1267,
-)
-
-
-_DEPOSIT_DATA = _descriptor.Descriptor(
- name='Data',
- full_name='ethereum.eth.v1alpha1.Deposit.Data',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.Deposit.Data.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248\232\265\030\006pubkey', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='withdrawal_credentials', full_name='ethereum.eth.v1alpha1.Deposit.Data.withdrawal_credentials', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='amount', full_name='ethereum.eth.v1alpha1.Deposit.Data.amount', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.Deposit.Data.signature', index=3,
- number=4, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1358,
- serialized_end=1485,
-)
-
-_DEPOSIT = _descriptor.Descriptor(
- name='Deposit',
- full_name='ethereum.eth.v1alpha1.Deposit',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='proof', full_name='ethereum.eth.v1alpha1.Deposit.proof', index=0,
- number=1, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00533,32', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='ethereum.eth.v1alpha1.Deposit.data', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_DEPOSIT_DATA, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1270,
- serialized_end=1485,
-)
-
-
-_VOLUNTARYEXIT = _descriptor.Descriptor(
- name='VoluntaryExit',
- full_name='ethereum.eth.v1alpha1.VoluntaryExit',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.VoluntaryExit.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator_index', full_name='ethereum.eth.v1alpha1.VoluntaryExit.validator_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1488,
- serialized_end=1646,
-)
-
-
-_SIGNEDVOLUNTARYEXIT = _descriptor.Descriptor(
- name='SignedVoluntaryExit',
- full_name='ethereum.eth.v1alpha1.SignedVoluntaryExit',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='exit', full_name='ethereum.eth.v1alpha1.SignedVoluntaryExit.exit', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.SignedVoluntaryExit.signature', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1648,
- serialized_end=1748,
-)
-
-
-_ETH1DATA = _descriptor.Descriptor(
- name='Eth1Data',
- full_name='ethereum.eth.v1alpha1.Eth1Data',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='deposit_root', full_name='ethereum.eth.v1alpha1.Eth1Data.deposit_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='deposit_count', full_name='ethereum.eth.v1alpha1.Eth1Data.deposit_count', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='block_hash', full_name='ethereum.eth.v1alpha1.Eth1Data.block_hash', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1750,
- serialized_end=1841,
-)
-
-
-_BEACONBLOCKHEADER = _descriptor.Descriptor(
- name='BeaconBlockHeader',
- full_name='ethereum.eth.v1alpha1.BeaconBlockHeader',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.BeaconBlockHeader.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='proposer_index', full_name='ethereum.eth.v1alpha1.BeaconBlockHeader.proposer_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='parent_root', full_name='ethereum.eth.v1alpha1.BeaconBlockHeader.parent_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='state_root', full_name='ethereum.eth.v1alpha1.BeaconBlockHeader.state_root', index=3,
- number=4, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='body_root', full_name='ethereum.eth.v1alpha1.BeaconBlockHeader.body_root', index=4,
- number=5, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1844,
- serialized_end=2087,
-)
-
-
-_SIGNEDBEACONBLOCKHEADER = _descriptor.Descriptor(
- name='SignedBeaconBlockHeader',
- full_name='ethereum.eth.v1alpha1.SignedBeaconBlockHeader',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='header', full_name='ethereum.eth.v1alpha1.SignedBeaconBlockHeader.header', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.SignedBeaconBlockHeader.signature', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2089,
- serialized_end=2199,
-)
-
-
-_INDEXEDATTESTATION = _descriptor.Descriptor(
- name='IndexedAttestation',
- full_name='ethereum.eth.v1alpha1.IndexedAttestation',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attesting_indices', full_name='ethereum.eth.v1alpha1.IndexedAttestation.attesting_indices', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\222\265\030\0042048', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='ethereum.eth.v1alpha1.IndexedAttestation.data', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='signature', full_name='ethereum.eth.v1alpha1.IndexedAttestation.signature', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2202,
- serialized_end=2340,
-)
-
-_BEACONBLOCK.fields_by_name['body'].message_type = _BEACONBLOCKBODY
-_SIGNEDBEACONBLOCK.fields_by_name['block'].message_type = _BEACONBLOCK
-_BEACONBLOCKBODY.fields_by_name['eth1_data'].message_type = _ETH1DATA
-_BEACONBLOCKBODY.fields_by_name['proposer_slashings'].message_type = _PROPOSERSLASHING
-_BEACONBLOCKBODY.fields_by_name['attester_slashings'].message_type = _ATTESTERSLASHING
-_BEACONBLOCKBODY.fields_by_name['attestations'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATION
-_BEACONBLOCKBODY.fields_by_name['deposits'].message_type = _DEPOSIT
-_BEACONBLOCKBODY.fields_by_name['voluntary_exits'].message_type = _SIGNEDVOLUNTARYEXIT
-_PROPOSERSLASHING.fields_by_name['header_1'].message_type = _SIGNEDBEACONBLOCKHEADER
-_PROPOSERSLASHING.fields_by_name['header_2'].message_type = _SIGNEDBEACONBLOCKHEADER
-_ATTESTERSLASHING.fields_by_name['attestation_1'].message_type = _INDEXEDATTESTATION
-_ATTESTERSLASHING.fields_by_name['attestation_2'].message_type = _INDEXEDATTESTATION
-_DEPOSIT_DATA.containing_type = _DEPOSIT
-_DEPOSIT.fields_by_name['data'].message_type = _DEPOSIT_DATA
-_SIGNEDVOLUNTARYEXIT.fields_by_name['exit'].message_type = _VOLUNTARYEXIT
-_SIGNEDBEACONBLOCKHEADER.fields_by_name['header'].message_type = _BEACONBLOCKHEADER
-_INDEXEDATTESTATION.fields_by_name['data'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATIONDATA
-DESCRIPTOR.message_types_by_name['BeaconBlock'] = _BEACONBLOCK
-DESCRIPTOR.message_types_by_name['SignedBeaconBlock'] = _SIGNEDBEACONBLOCK
-DESCRIPTOR.message_types_by_name['BeaconBlockBody'] = _BEACONBLOCKBODY
-DESCRIPTOR.message_types_by_name['ProposerSlashing'] = _PROPOSERSLASHING
-DESCRIPTOR.message_types_by_name['AttesterSlashing'] = _ATTESTERSLASHING
-DESCRIPTOR.message_types_by_name['Deposit'] = _DEPOSIT
-DESCRIPTOR.message_types_by_name['VoluntaryExit'] = _VOLUNTARYEXIT
-DESCRIPTOR.message_types_by_name['SignedVoluntaryExit'] = _SIGNEDVOLUNTARYEXIT
-DESCRIPTOR.message_types_by_name['Eth1Data'] = _ETH1DATA
-DESCRIPTOR.message_types_by_name['BeaconBlockHeader'] = _BEACONBLOCKHEADER
-DESCRIPTOR.message_types_by_name['SignedBeaconBlockHeader'] = _SIGNEDBEACONBLOCKHEADER
-DESCRIPTOR.message_types_by_name['IndexedAttestation'] = _INDEXEDATTESTATION
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-BeaconBlock = _reflection.GeneratedProtocolMessageType('BeaconBlock', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONBLOCK,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconBlock)
- })
-_sym_db.RegisterMessage(BeaconBlock)
-
-SignedBeaconBlock = _reflection.GeneratedProtocolMessageType('SignedBeaconBlock', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDBEACONBLOCK,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedBeaconBlock)
- })
-_sym_db.RegisterMessage(SignedBeaconBlock)
-
-BeaconBlockBody = _reflection.GeneratedProtocolMessageType('BeaconBlockBody', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONBLOCKBODY,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconBlockBody)
- })
-_sym_db.RegisterMessage(BeaconBlockBody)
-
-ProposerSlashing = _reflection.GeneratedProtocolMessageType('ProposerSlashing', (_message.Message,), {
- 'DESCRIPTOR' : _PROPOSERSLASHING,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ProposerSlashing)
- })
-_sym_db.RegisterMessage(ProposerSlashing)
-
-AttesterSlashing = _reflection.GeneratedProtocolMessageType('AttesterSlashing', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTERSLASHING,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttesterSlashing)
- })
-_sym_db.RegisterMessage(AttesterSlashing)
-
-Deposit = _reflection.GeneratedProtocolMessageType('Deposit', (_message.Message,), {
-
- 'Data' : _reflection.GeneratedProtocolMessageType('Data', (_message.Message,), {
- 'DESCRIPTOR' : _DEPOSIT_DATA,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Deposit.Data)
- })
- ,
- 'DESCRIPTOR' : _DEPOSIT,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Deposit)
- })
-_sym_db.RegisterMessage(Deposit)
-_sym_db.RegisterMessage(Deposit.Data)
-
-VoluntaryExit = _reflection.GeneratedProtocolMessageType('VoluntaryExit', (_message.Message,), {
- 'DESCRIPTOR' : _VOLUNTARYEXIT,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.VoluntaryExit)
- })
-_sym_db.RegisterMessage(VoluntaryExit)
-
-SignedVoluntaryExit = _reflection.GeneratedProtocolMessageType('SignedVoluntaryExit', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDVOLUNTARYEXIT,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedVoluntaryExit)
- })
-_sym_db.RegisterMessage(SignedVoluntaryExit)
-
-Eth1Data = _reflection.GeneratedProtocolMessageType('Eth1Data', (_message.Message,), {
- 'DESCRIPTOR' : _ETH1DATA,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Eth1Data)
- })
-_sym_db.RegisterMessage(Eth1Data)
-
-BeaconBlockHeader = _reflection.GeneratedProtocolMessageType('BeaconBlockHeader', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONBLOCKHEADER,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconBlockHeader)
- })
-_sym_db.RegisterMessage(BeaconBlockHeader)
-
-SignedBeaconBlockHeader = _reflection.GeneratedProtocolMessageType('SignedBeaconBlockHeader', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDBEACONBLOCKHEADER,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedBeaconBlockHeader)
- })
-_sym_db.RegisterMessage(SignedBeaconBlockHeader)
-
-IndexedAttestation = _reflection.GeneratedProtocolMessageType('IndexedAttestation', (_message.Message,), {
- 'DESCRIPTOR' : _INDEXEDATTESTATION,
- '__module__' : 'eth.v1alpha1.beacon_block_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.IndexedAttestation)
- })
-_sym_db.RegisterMessage(IndexedAttestation)
-
-
-_BEACONBLOCK.fields_by_name['slot']._options = None
-_BEACONBLOCK.fields_by_name['proposer_index']._options = None
-_BEACONBLOCK.fields_by_name['parent_root']._options = None
-_BEACONBLOCK.fields_by_name['state_root']._options = None
-_SIGNEDBEACONBLOCK.fields_by_name['signature']._options = None
-_BEACONBLOCKBODY.fields_by_name['randao_reveal']._options = None
-_BEACONBLOCKBODY.fields_by_name['graffiti']._options = None
-_BEACONBLOCKBODY.fields_by_name['proposer_slashings']._options = None
-_BEACONBLOCKBODY.fields_by_name['attester_slashings']._options = None
-_BEACONBLOCKBODY.fields_by_name['attestations']._options = None
-_BEACONBLOCKBODY.fields_by_name['deposits']._options = None
-_BEACONBLOCKBODY.fields_by_name['voluntary_exits']._options = None
-_DEPOSIT_DATA.fields_by_name['public_key']._options = None
-_DEPOSIT_DATA.fields_by_name['withdrawal_credentials']._options = None
-_DEPOSIT_DATA.fields_by_name['signature']._options = None
-_DEPOSIT.fields_by_name['proof']._options = None
-_VOLUNTARYEXIT.fields_by_name['epoch']._options = None
-_VOLUNTARYEXIT.fields_by_name['validator_index']._options = None
-_SIGNEDVOLUNTARYEXIT.fields_by_name['signature']._options = None
-_ETH1DATA.fields_by_name['deposit_root']._options = None
-_ETH1DATA.fields_by_name['block_hash']._options = None
-_BEACONBLOCKHEADER.fields_by_name['slot']._options = None
-_BEACONBLOCKHEADER.fields_by_name['proposer_index']._options = None
-_BEACONBLOCKHEADER.fields_by_name['parent_root']._options = None
-_BEACONBLOCKHEADER.fields_by_name['state_root']._options = None
-_BEACONBLOCKHEADER.fields_by_name['body_root']._options = None
-_SIGNEDBEACONBLOCKHEADER.fields_by_name['signature']._options = None
-_INDEXEDATTESTATION.fields_by_name['attesting_indices']._options = None
-_INDEXEDATTESTATION.fields_by_name['signature']._options = None
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/beacon_chain.proto b/proto/eth/v1alpha1/beacon_chain.proto
deleted file mode 100644
index 48f29e9..0000000
--- a/proto/eth/v1alpha1/beacon_chain.proto
+++ /dev/null
@@ -1,884 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/v1alpha1/beacon_chain.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-package ethereum.eth.v1alpha1;
-
-import "google/api/annotations.proto";
-import "google/protobuf/empty.proto";
-
-import "eth/ext/options.proto";
-import "eth/v1alpha1/attestation.proto";
-import "eth/v1alpha1/beacon_block.proto";
-import "eth/v1alpha1/validator.proto";
-
-option csharp_namespace = "Ethereum.Eth.v1alpha1";
-option go_package = "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth";
-option java_multiple_files = true;
-option java_outer_classname = "BeaconChainProto";
-option java_package = "org.ethereum.eth.v1alpha1";
-option php_namespace = "Ethereum\\Eth\\v1alpha1";
-
-// Beacon chain API
-//
-// The beacon chain API can be used to access data relevant to the Ethereum 2.0
-// phase 0 beacon chain.
-service BeaconChain {
- // TODO(preston): Batch requests?
-
- // Retrieve attestations by block root, slot, or epoch.
- //
- // The server may return an empty list when no attestations match the given
- // filter criteria. This RPC should not return NOT_FOUND. Only one filter
- // criteria should be used. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc ListAttestations(ListAttestationsRequest) returns (ListAttestationsResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/attestations"
- };
- }
-
- // Retrieve indexed attestations by block root, slot, or epoch.
- //
- // The server may return an empty list when no indexed attestations match the given
- // filter criteria. This RPC should not return NOT_FOUND. Only one filter
- // criteria should be used. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc ListIndexedAttestations(ListIndexedAttestationsRequest) returns (ListIndexedAttestationsResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/attestations/indexed"
- };
- }
-
- // Server-side stream of attestations as they are received by
- // the beacon chain node.
- rpc StreamAttestations(google.protobuf.Empty) returns (stream Attestation) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/attestations/stream"
- };
- }
-
- // Server-side stream of indexed attestations as they are received by
- // the beacon chain node.
- rpc StreamIndexedAttestations(google.protobuf.Empty) returns (stream IndexedAttestation) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/attestations/indexed/stream"
- };
- }
-
- // Retrieve attestations from pool.
- //
- // The server returns a list of attestations that have been seen but not
- // yet processed. Pool attestations eventually expire as the slot
- // advances, so an attestation missing from this request does not imply
- // that it was included in a block. The attestation may have expired.
- // Refer to the ethereum 2.0 specification for more details on how
- // attestations are processed and when they are no longer valid.
- // https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/0_beacon-chain.md#attestations
- rpc AttestationPool(AttestationPoolRequest) returns (AttestationPoolResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/attestations/pool"
- };
- }
-
- // Retrieve blocks by root, slot, or epoch.
- //
- // The server may return multiple blocks in the case that a slot or epoch is
- // provided as the filter criteria. The server may return an empty list when
- // no blocks in their database match the filter criteria. This RPC should
- // not return NOT_FOUND. Only one filter criteria should be used. This endpoint
- // allows for retrieval of genesis information via a boolean query filter.
- rpc ListBlocks(ListBlocksRequest) returns (ListBlocksResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/blocks"
- };
- }
-
- // Server-side stream of all signed blocks as they are received by
- // the beacon chain node.
- rpc StreamBlocks(StreamBlocksRequest) returns (stream SignedBeaconBlock) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/blocks/stream"
- };
- }
-
- // Server-side stream of information about the head of the beacon chain
- // from the view of the beacon chain node.
- //
- // This includes the head block slot and root as well as information about
- // the most recent finalized and justified slots.
- rpc StreamChainHead(google.protobuf.Empty) returns (stream ChainHead) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/chainhead/stream"
- };
- }
-
- // Retrieve information about the head of the beacon chain from the view of
- // the beacon chain node.
- //
- // This includes the head block slot and root as well as information about
- // the most recent finalized and justified slots.
- rpc GetChainHead(google.protobuf.Empty) returns (ChainHead) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/chainhead"
- };
- }
-
- // Retrieve information about the weak subjectivity of the beacon chain from the view of
- // the beacon chain node.
- //
- // This includes the weak subjectivity block root, state root and epoch number.
- rpc GetWeakSubjectivityCheckpoint(google.protobuf.Empty) returns (WeakSubjectivityCheckpoint) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/weak_subjectivity_checkpoint"
- };
- }
-
- // Retrieve the beacon chain committees for a given epoch.
- //
- // If no filter criteria is specified, the response returns
- // all beacon committees for the current epoch. The results are paginated by default.
- // This endpoint allows for retrieval of genesis information via a boolean query filter.
- rpc ListBeaconCommittees(ListCommitteesRequest) returns (BeaconCommittees) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/committees"
- };
- }
-
- // Retrieve validator balances for a given set of public keys at a specific
- // epoch in time. This endpoint allows for retrieval of genesis information
- // via a boolean query filter.
- rpc ListValidatorBalances(ListValidatorBalancesRequest) returns (ValidatorBalances) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/balances"
- };
- }
-
- // Retrieve the current validator registry.
- //
- // The request may include an optional historical epoch to retrieve a
- // specific validator set in time. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc ListValidators(ListValidatorsRequest) returns (Validators) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators"
- };
- }
-
- // Retrieve information about a specific validator in the registry.
- //
- // This request may query by validator index or public key.
- rpc GetValidator(GetValidatorRequest) returns (Validator) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator"
- };
- }
-
- // Retrieve the active set changes for a given epoch.
- //
- // This data includes any activations, voluntary exits, and involuntary
- // ejections. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc GetValidatorActiveSetChanges(GetValidatorActiveSetChangesRequest) returns (ActiveSetChanges) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/activesetchanges"
- };
- }
-
- // Retrieve the current validator queue information.
- rpc GetValidatorQueue(google.protobuf.Empty) returns (ValidatorQueue) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/queue"
- };
- }
-
- // GetValidatorPerformance reports a validator's latest balance along with other important
- // metrics on rewards and penalties throughout its lifecycle in the beacon chain.
- // The request takes in a list of validator public keys and returns a performance report
- // for all of them respectively.
- rpc GetValidatorPerformance(ValidatorPerformanceRequest) returns (ValidatorPerformanceResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/performance"
- };
- }
-
- // Retrieve the validator assignments for a given epoch.
- //
- // This request may specify optional validator indices or public keys to
- // filter validator assignments. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc ListValidatorAssignments(ListValidatorAssignmentsRequest) returns (ValidatorAssignments) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/assignments"
- };
- }
-
- // Retrieve the validator participation information for a given epoch.
- //
- // This method returns information about the global participation of
- // validator attestations. This endpoint allows for retrieval of genesis
- // information via a boolean query filter.
- rpc GetValidatorParticipation(GetValidatorParticipationRequest) returns (ValidatorParticipationResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validators/participation"
- };
- }
-
- // Retrieve the current configuration parameters of the beacon chain.
- rpc GetBeaconConfig(google.protobuf.Empty) returns (BeaconConfig) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/config"
- };
- }
-
- // Server-side stream of validator information at each epoch.
- rpc StreamValidatorsInfo(stream ValidatorChangeSet) returns (stream ValidatorInfo) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/validators/info/stream"
- };
- }
-
- // Submit an attester slashing object to the beacon node.
- rpc SubmitAttesterSlashing(AttesterSlashing) returns (SubmitSlashingResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/slashings/attester/submit"
- };
- }
-
- // Submit a proposer slashing object to the beacon node.
- rpc SubmitProposerSlashing(ProposerSlashing) returns (SubmitSlashingResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/slashings/proposer/submit"
- };
- }
-
- // Returns a list of validators individual vote status of a given epoch.
- rpc GetIndividualVotes(IndividualVotesRequest) returns (IndividualVotesRespond) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/beacon/individual_votes"
- };
- }
-}
-
-// SetAction defines the type of action that should be applied to the keys in a validator change set.
-enum SetAction {
- // ADD_VALIDATOR_KEYS adds to the existing keys.
- ADD_VALIDATOR_KEYS = 0;
- // REMOVE_VALIDATOR_KEYS removes from the existing keys.
- REMOVE_VALIDATOR_KEYS = 1;
- // SET_VALIDATOR_KEYS overwrites the existing keys.
- SET_VALIDATOR_KEYS = 2;
-}
-
-// ValidatorChangeSet updates the server's list of keys on which to operate.
-message ValidatorChangeSet {
- // Action (add/remove/set).
- SetAction action = 1;
-
- // 48 byte BLS public keys of validators on which the operation occurs.
- repeated bytes public_keys = 2;
-}
-
-// Request for indexed attestations by target epoch.
-message ListIndexedAttestationsRequest {
- oneof query_filter {
- // Retrieve attestations by epoch processed.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve genesis epoch attestations.
- bool genesis_epoch = 2;
- }
-
- // The maximum number of IndexedAttestations to return in the response.
- // This field is optional.
- int32 page_size = 3;
-
- // A pagination token returned from a previous call to `ListIndexedAttestations`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 4;
-}
-
-// Request for attestations.
-message ListAttestationsRequest {
- // TODO(preston): Test oneof with gRPC gateway.
-
- oneof query_filter {
- // Filter attestations by epoch processed.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve attestations from 0 epoch.
- bool genesis_epoch = 2;
- }
-
- // The maximum number of Attestations to return in the response.
- // This field is optional.
- int32 page_size = 3;
-
- // A pagination token returned from a previous call to `ListAttestations`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 4;
-}
-
-message ListAttestationsResponse {
- repeated Attestation attestations = 1;
-
- // A pagination token returned from a previous call to `ListAttestations`
- // that indicates from where listing should continue.
- // This field is optional.
- string next_page_token = 2;
-
- // Total count of Attestations matching the request filter.
- int32 total_size = 3;
-}
-
-message ListIndexedAttestationsResponse {
- repeated IndexedAttestation indexed_attestations = 1;
-
- // A pagination token returned from a previous call to `ListIndexedAttestations`
- // that indicates from where listing should continue.
- // This field is optional.
- string next_page_token = 2;
-
- // Total count of Attestations matching the request filter.
- int32 total_size = 3;
-}
-
-message ListBlocksRequest {
- oneof query_filter {
- // Block root filter to return a single block.
- bytes root = 1;
-
- // Slot to lookup a block. If the slot is not yet finalized, this
- // criteria may yield multiple valid blocks if the node has seen blocks
- // from another fork.
- uint64 slot = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // The epoch number for which to retrieve blocks. If specified, this
- // will return all blocks found within the span of the specified epoch.
- uint64 epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve genesis block.
- bool genesis = 4;
- }
-
- // The maximum number of Blocks to return in the response.
- // This field is optional.
- int32 page_size = 5;
-
- // A pagination token returned from a previous call to `ListBlocks`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 6;
-}
-
-message ListBlocksResponse {
- repeated BeaconBlockContainer blockContainers = 1;
-
- // A pagination token returned from a previous call to `ListBlocks`
- // that indicates from where listing should continue.
- // This field is optional.
- string next_page_token = 2;
-
- // Total count of Blocks matching the request filter.
- int32 total_size = 3;
-}
-
-// Request to only return blocks that is verified by the beacon node.
-message StreamBlocksRequest {
- bool verified_only = 1;
-}
-
-// A container that contains both the beacon block
-// and its corresponding root.
-message BeaconBlockContainer {
- // The contained Ethereum beacon block.
- SignedBeaconBlock block = 1;
-
- // 32 byte merkle tree root of contained beacon block.
- bytes block_root = 2;
-
- // Boolean indicating whether the block is canonical.
- bool canonical = 3;
-}
-
-// Information about the head of the beacon chain.
-message ChainHead {
- // Slot of the head block.
- uint64 head_slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Epoch of the head block.
- uint64 head_epoch = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // 32 byte merkle tree root of the canonical head block in the beacon node.
- bytes head_block_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // Most recent slot that contains the finalized block.
- uint64 finalized_slot = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Epoch of the finalized block.
- uint64 finalized_epoch = 5 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Most recent 32 byte finalized block root.
- bytes finalized_block_root = 6 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // Most recent slot that contains the justified block.
- uint64 justified_slot = 7 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Epoch of the justified block.
- uint64 justified_epoch = 8 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Most recent 32 byte justified block root.
- bytes justified_block_root = 9 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // Most recent slot that contains the previous justified block.
- uint64 previous_justified_slot = 10 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Epoch of the previous justified block.
- uint64 previous_justified_epoch = 11 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Previous 32 byte justified block root.
- bytes previous_justified_block_root = 12 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message ListCommitteesRequest {
- oneof query_filter {
- // Optional criteria to retrieve data at a specific epoch.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve genesis data.
- bool genesis = 2;
- }
-}
-
-message BeaconCommittees {
- message CommitteeItem {
- // A committee is a list of validator indices participating in consensus at a slot.
- repeated uint64 validator_indices = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- }
-
- message CommitteesList {
- // A list of committees.
- repeated CommitteeItem committees = 1;
- }
-
- // The epoch for which the committees in the response belong to.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // A map of validator committees by slot.
- map committees = 2;
-
- // The number of active validators at the given epoch.
- uint64 active_validator_count = 3;
-}
-
-message ListValidatorBalancesRequest {
- oneof query_filter {
- // Optional criteria to retrieve balances at a specific epoch.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve the genesis list of balances.
- bool genesis = 2;
- }
-
- // Validator 48 byte BLS public keys to filter validators for the given
- // epoch.
- repeated bytes public_keys = 3 [(ethereum.eth.ext.ssz_size) = "?,48"];
- // Validator indices to filter validators for the given epoch.
- repeated uint64 indices = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // The maximum number of Validators to return in the response.
- // This field is optional.
- int32 page_size = 5;
-
- // A pagination token returned from a previous call to `GetValidators`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 6;
-}
-
-message ValidatorBalances {
- // Epoch which the state was considered to determine the validator balances.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- message Balance {
- // Validator's 48 byte BLS public key.
- bytes public_key = 1 [(ethereum.eth.ext.ssz_size) = "48"];
-
- // Validator's index in the validator set.
- uint64 index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // Validator's balance in gwei.
- uint64 balance = 3;
-
- // Validator's status, UNKNOWN if not found.
- string status = 4;
- }
-
- repeated Balance balances = 2;
-
- // A pagination token returned from a previous call to `GetListValidatorBalances`
- // that indicates from where listing should continue.
- string next_page_token = 3;
-
- // Total count of items matching the request filter.
- int32 total_size = 4;
-}
-
-message ListValidatorsRequest {
- oneof query_filter {
- // Optional criteria to retrieve validators at a specific epoch.
- // Omitting this field or setting it to zero will retrieve a response
- // with the current active validator set.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve the genesis set of validators.
- bool genesis = 2;
- }
-
- // Specify whether or not you want to retrieve only active validators.
- bool active = 3;
-
- // The maximum number of Validators to return in the response.
- // This field is optional.
- int32 page_size = 4;
-
- // A pagination token returned from a previous call to `GetValidators`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 5;
-
- // Specify which validators you would like to retrieve by their public keys.
- // This field is optional.
- repeated bytes public_keys = 6;
-
- // Specify which validators you would like to retrieve by their indices.
- // This field is optional.
- repeated uint64 indices = 7 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message GetValidatorRequest {
- oneof query_filter {
- // Validator index in the registry.
- uint64 index = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 48 byte validator public key.
- bytes public_key = 2 [(ethereum.eth.ext.ssz_size) = "48"];
- }
-}
-
-message Validators {
- // Epoch which the state was considered to determine the active validator
- // set. This field is not optional. Zero value epoch indicates the validator
- // set is from the Ethereum 2.0 genesis set.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- message ValidatorContainer {
- uint64 index = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- Validator validator = 2;
- }
-
- repeated ValidatorContainer validator_list = 2;
-
- // A pagination token returned from a previous call to `GetValidators`
- // that indicates from where listing should continue.
- // This field is optional.
- string next_page_token = 3;
-
- // Total count of Validators matching the request filter.
- int32 total_size = 4;
-}
-
-message GetValidatorActiveSetChangesRequest {
- oneof query_filter {
- // Optional criteria to retrieve balances at a specific epoch.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Optional criteria to retrieve the genesis list of balances.
- bool genesis = 2;
- }
-}
-
-message ActiveSetChanges {
- // Epoch which the state was considered to determine the active validator
- // set.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // 48 byte validator public keys that have been activated in the given epoch.
- repeated bytes activated_public_keys = 2 [(ethereum.eth.ext.ssz_size) = "?,48"];
-
- // Indices of validators activated in the given epoch.
- repeated uint64 activated_indices = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 48 byte validator public keys that have been voluntarily exited in the given epoch.
- repeated bytes exited_public_keys = 4 [(ethereum.eth.ext.ssz_size) = "?,48"];
-
- // Indices of validators exited in the given epoch.
- repeated uint64 exited_indices = 5 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 48 byte validator public keys that have been slashed in the given epoch.
- repeated bytes slashed_public_keys = 6 [(ethereum.eth.ext.ssz_size) = "?,48"];
-
- // Indices of validators slashed in the given epoch.
- repeated uint64 slashed_indices = 7 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // 48 byte validator public keys that have been involuntarily ejected in this epoch.
- repeated bytes ejected_public_keys = 8 [(ethereum.eth.ext.ssz_size) = "?,48"];
-
- // Indices of validators ejected in the given epoch.
- repeated uint64 ejected_indices = 9 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message ValidatorPerformanceRequest {
- // A list of 48 byte validator public keys.
- repeated bytes public_keys = 1 [deprecated = true];
- // A list of validator indices to retrieve performance by their indices.
- repeated uint64 indices = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message ValidatorPerformanceResponse {
- // A list of validator effective balances mapped 1-to-1 with the request's
- // public keys.
- repeated uint64 current_effective_balances = 1;
- // The slot of when validator's attestation got included in the chain at previous epoch, the slot
- // is mapped 1-to-1 with the request's public keys.
- repeated uint64 inclusion_slots = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- // The distance of when validator submitted and got included in the chain, the distance
- // is mapped 1-to-1 with the request's public keys.
- repeated uint64 inclusion_distances = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- // Whether the list of validator recently correctly voted for source at previous epoch, the result
- // is mapped 1-to-1 with the request's public keys.
- repeated bool correctly_voted_source = 4;
- // Whether the list of validator recently correctly voted for target at previous epoch, the result
- // is mapped 1-to-1 with the request's public keys.
- repeated bool correctly_voted_target = 5;
- // Whether the list of validator recently correctly voted for head at previous epoch, the result
- // is mapped 1-to-1 with the request's public keys.
- repeated bool correctly_voted_head = 6;
- // The balance of validators before epoch transition, the balance is mapped 1-to-1 with the requests's
- // public keys.
- repeated uint64 balances_before_epoch_transition = 7;
- // The balance of validators after epoch transition, the balance is mapped 1-to-1 with the requests's
- // public keys.
- repeated uint64 balances_after_epoch_transition = 8;
- // The total number of validators from the request not found in
- // in the beacon chain.
- repeated bytes missing_validators = 9;
- // The average active validator balance in the beacon chain.
- float average_active_validator_balance = 10;
- // The public keys in the order they are in of the response.
- repeated bytes public_keys = 11 [(ethereum.eth.ext.ssz_size) = "?,48"];
-}
-
-message ValidatorQueue {
- // The amount of ether in gwei allowed to enter or exit the active
- // validator set.
- uint64 churn_limit = 1;
-
- // Ordered list of 48 byte public keys awaiting activation. 0th index is the
- // next key to be processed.
- repeated bytes activation_public_keys = 2 [(ethereum.eth.ext.ssz_size) = "?,48", deprecated = true];
-
- // Ordered list of public keys awaiting exit. 0th index is the next key to
- // be processed.
- repeated bytes exit_public_keys = 3 [(ethereum.eth.ext.ssz_size) = "?,48", deprecated = true];
-
- // Ordered list of validator indices awaiting activation. 0th item in the list is the
- // next validator index to be processed.
- repeated uint64 activation_validator_indices = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // Ordered list of validator indices awaiting exit. 0th item in the list is the
- // next validator index to be processed.
- repeated uint64 exit_validator_indices = 5 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message ListValidatorAssignmentsRequest {
- oneof query_filter {
- // Epoch to validator assignments for.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Whether or not to query for the genesis information.
- bool genesis = 2;
- }
- // 48 byte validator public keys to filter assignments for the given epoch.
- repeated bytes public_keys = 3 [(ethereum.eth.ext.ssz_size) = "?,48"];
- // Validator indicies to filter assignments for the given epoch.
- repeated uint64 indices = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // The maximum number of ValidatorAssignments to return in the response.
- // This field is optional.
- int32 page_size = 5;
-
- // A pagination token returned from a previous call to `ListValidatorAssignments`
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 6;
-}
-
-message ValidatorAssignments {
- message CommitteeAssignment {
- // Beacon committees are responsible for crosslinking committee data back to the beacon chain,
- // they also attest and produce beacon chain blocks. This is a list of validator indices that
- // are in the same committee as requested validator, everyone in the committee is assigned to the
- // same slot and same committee.
- repeated uint64 beacon_committees = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // Committee index represents the committee of validator that's in.
- uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
-
- // Beacon chain slot in which the validator must perform its assigned
- // duty as an attester.
- uint64 attester_slot = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Beacon chain slots in which the validator must perform its assigned
- // duty as a proposer.
- repeated uint64 proposer_slots = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // 48 byte BLS public key.
- bytes public_key = 5 [(ethereum.eth.ext.ssz_size) = "48", deprecated = true];
-
- // Validator index in the beacon state.
- uint64 validator_index = 6 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- }
-
- // The epoch for which this set of validator assignments is valid.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- repeated CommitteeAssignment assignments = 2;
-
- // A pagination token returned from a previous call to `ListValidatorAssignmentsRequest`
- // that indicates where this listing should continue from.
- // This field is optional.
- string next_page_token = 3;
-
- // Total count of CommitteeAssignments matching the request filter.
- int32 total_size = 4;
-}
-
-message GetValidatorParticipationRequest {
- oneof query_filter {
- // Epoch to request participation information.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Whether or not to query for the genesis information.
- bool genesis = 2;
- }
-}
-
-message ValidatorParticipationResponse {
- // Epoch which this message is applicable.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Whether or not epoch has been finalized.
- bool finalized = 2;
-
- // The actual validator participation metrics.
- ValidatorParticipation participation = 3;
-}
-
-message AttestationPoolRequest {
- // The maximum number of objects to return in the response.
- // This field is optional.
- int32 page_size = 1;
-
- // A pagination token returned from a previous call
- // that indicates where this listing should continue from.
- // This field is optional.
- string page_token = 2;
-}
-
-message AttestationPoolResponse {
- // List of attestations currently in the pool of the beacon chain.
- repeated Attestation attestations = 1;
-
- // A pagination token returned from a previous call
- // that indicates where this listing should continue from.
- // This field is optional.
- string next_page_token = 2;
-
- // Total count of objects matching the request filter.
- int32 total_size = 3;
-}
-
-// Information about the configuration parameters of the beacon node, such
-// as the slots per epoch, slots per eth1 voting period, and more.
-message BeaconConfig {
- map config = 1;
-}
-
-message SubmitSlashingResponse {
- // Indices of the validators to be slashed by the submitted
- // proposer/attester slashing object.
- repeated uint64 slashed_indices = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message IndividualVotesRequest {
- // Epoch of the request.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
- // Validator 48 byte BLS public keys to filter validators for the given epoch.
- repeated bytes public_keys = 2;
- // Validator indices to filter validators for the given epoch.
- repeated uint64 indices = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message IndividualVotesRespond {
- message IndividualVote {
- // The epoch of the vote status request.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
- // The public key of the vote status request.
- bytes public_key = 2;
- // The validator index of the request.
- uint64 validator_index = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- // Has the validator been slashed.
- bool is_slashed = 4;
- // Is the validator withdrawable.
- bool is_withdrawable_in_current_epoch = 5;
- // Is the validator active in current epoch.
- bool is_active_in_current_epoch = 6;
- // Was the validator active in previous epoch.
- bool is_active_in_previous_epoch = 7;
- // Did validator attest for current epoch.
- bool is_current_epoch_attester = 8;
- // Did validator attest target for current epoch.
- bool is_current_epoch_target_attester = 9;
- // Did validator attest for previous epoch.
- bool is_previous_epoch_attester = 10;
- // Did validator attest target for previous epoch.
- bool is_previous_epoch_target_attester = 11;
- // Did validator attest head for previous epoch.
- bool is_previous_epoch_head_attester = 12;
- // The current effective balance of the validator.
- uint64 current_epoch_effective_balance_gwei = 13;
- // The slots of when the validator's attestation got included in the block.
- uint64 inclusion_slot = 14 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- // How many slots have passed until the validator's attestation got included in the block.
- uint64 inclusion_distance = 15 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- }
-
- repeated IndividualVote individual_votes = 1;
-}
-
-message WeakSubjectivityCheckpoint {
- // The block root of weak subjectivity checkpoint.
- bytes block_root = 1;
- // The state root of weak subjectivity checkpoint.
- bytes state_root = 2;
- // The epoch of weak subjectivity checkpoint.
- uint64 epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-}
\ No newline at end of file
diff --git a/proto/eth/v1alpha1/beacon_chain_pb2.py b/proto/eth/v1alpha1/beacon_chain_pb2.py
deleted file mode 100644
index 18c91ef..0000000
--- a/proto/eth/v1alpha1/beacon_chain_pb2.py
+++ /dev/null
@@ -1,3007 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/v1alpha1/beacon_chain.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from eth.ext import options_pb2 as eth_dot_ext_dot_options__pb2
-from eth.v1alpha1 import attestation_pb2 as eth_dot_v1alpha1_dot_attestation__pb2
-from eth.v1alpha1 import beacon_block_pb2 as eth_dot_v1alpha1_dot_beacon__block__pb2
-from eth.v1alpha1 import validator_pb2 as eth_dot_v1alpha1_dot_validator__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/v1alpha1/beacon_chain.proto',
- package='ethereum.eth.v1alpha1',
- syntax='proto3',
- serialized_options=b'\n\031org.ethereum.eth.v1alpha1B\020BeaconChainProtoP\001Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\252\002\025Ethereum.Eth.v1alpha1\312\002\025Ethereum\\Eth\\v1alpha1',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x1f\x65th/v1alpha1/beacon_chain.proto\x12\x15\x65thereum.eth.v1alpha1\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15\x65th/ext/options.proto\x1a\x1e\x65th/v1alpha1/attestation.proto\x1a\x1f\x65th/v1alpha1/beacon_block.proto\x1a\x1c\x65th/v1alpha1/validator.proto\"[\n\x12ValidatorChangeSet\x12\x30\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32 .ethereum.eth.v1alpha1.SetAction\x12\x13\n\x0bpublic_keys\x18\x02 \x03(\x0c\"\xb0\x01\n\x1eListIndexedAttestationsRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x17\n\rgenesis_epoch\x18\x02 \x01(\x08H\x00\x12\x11\n\tpage_size\x18\x03 \x01(\x05\x12\x12\n\npage_token\x18\x04 \x01(\tB\x0e\n\x0cquery_filter\"\xa9\x01\n\x17ListAttestationsRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x17\n\rgenesis_epoch\x18\x02 \x01(\x08H\x00\x12\x11\n\tpage_size\x18\x03 \x01(\x05\x12\x12\n\npage_token\x18\x04 \x01(\tB\x0e\n\x0cquery_filter\"\x81\x01\n\x18ListAttestationsResponse\x12\x38\n\x0c\x61ttestations\x18\x01 \x03(\x0b\x32\".ethereum.eth.v1alpha1.Attestation\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x05\"\x97\x01\n\x1fListIndexedAttestationsResponse\x12G\n\x14indexed_attestations\x18\x01 \x03(\x0b\x32).ethereum.eth.v1alpha1.IndexedAttestation\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x05\"\xeb\x01\n\x11ListBlocksRequest\x12\x0e\n\x04root\x18\x01 \x01(\x0cH\x00\x12<\n\x04slot\x18\x02 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.SlotH\x00\x12>\n\x05\x65poch\x18\x03 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x04 \x01(\x08H\x00\x12\x11\n\tpage_size\x18\x05 \x01(\x05\x12\x12\n\npage_token\x18\x06 \x01(\tB\x0e\n\x0cquery_filter\"\x87\x01\n\x12ListBlocksResponse\x12\x44\n\x0f\x62lockContainers\x18\x01 \x03(\x0b\x32+.ethereum.eth.v1alpha1.BeaconBlockContainer\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x05\",\n\x13StreamBlocksRequest\x12\x15\n\rverified_only\x18\x01 \x01(\x08\"v\n\x14\x42\x65\x61\x63onBlockContainer\x12\x37\n\x05\x62lock\x18\x01 \x01(\x0b\x32(.ethereum.eth.v1alpha1.SignedBeaconBlock\x12\x12\n\nblock_root\x18\x02 \x01(\x0c\x12\x11\n\tcanonical\x18\x03 \x01(\x08\"\xe7\x05\n\tChainHead\x12?\n\thead_slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x41\n\nhead_epoch\x18\x02 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x1f\n\x0fhead_block_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x44\n\x0e\x66inalized_slot\x18\x04 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x46\n\x0f\x66inalized_epoch\x18\x05 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12$\n\x14\x66inalized_block_root\x18\x06 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x44\n\x0ejustified_slot\x18\x07 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x46\n\x0fjustified_epoch\x18\x08 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12$\n\x14justified_block_root\x18\t \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12M\n\x17previous_justified_slot\x18\n \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12O\n\x18previous_justified_epoch\x18\x0b \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12-\n\x1dprevious_justified_block_root\x18\x0c \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"z\n\x15ListCommitteesRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x42\x0e\n\x0cquery_filter\"\xe9\x03\n\x10\x42\x65\x61\x63onCommittees\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12K\n\ncommittees\x18\x02 \x03(\x0b\x32\x37.ethereum.eth.v1alpha1.BeaconCommittees.CommitteesEntry\x12\x1e\n\x16\x61\x63tive_validator_count\x18\x03 \x01(\x04\x1a\x62\n\rCommitteeItem\x12Q\n\x11validator_indices\x18\x01 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x1a[\n\x0e\x43ommitteesList\x12I\n\ncommittees\x18\x01 \x03(\x0b\x32\x35.ethereum.eth.v1alpha1.BeaconCommittees.CommitteeItem\x1ai\n\x0f\x43ommitteesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x45\n\x05value\x18\x02 \x01(\x0b\x32\x36.ethereum.eth.v1alpha1.BeaconCommittees.CommitteesList:\x02\x38\x01\"\x90\x02\n\x1cListValidatorBalancesRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x12\x1d\n\x0bpublic_keys\x18\x03 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12G\n\x07indices\x18\x04 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x11\n\tpage_size\x18\x05 \x01(\x05\x12\x12\n\npage_token\x18\x06 \x01(\tB\x0e\n\x0cquery_filter\"\xd2\x02\n\x11ValidatorBalances\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x42\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32\x30.ethereum.eth.v1alpha1.ValidatorBalances.Balance\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\x12\x12\n\ntotal_size\x18\x04 \x01(\x05\x1a\x8d\x01\n\x07\x42\x61lance\x12\x1a\n\npublic_key\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38\x12\x45\n\x05index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x0f\n\x07\x62\x61lance\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\"\x8f\x02\n\x15ListValidatorsRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x12\x0e\n\x06\x61\x63tive\x18\x03 \x01(\x08\x12\x11\n\tpage_size\x18\x04 \x01(\x05\x12\x12\n\npage_token\x18\x05 \x01(\t\x12\x13\n\x0bpublic_keys\x18\x06 \x03(\x0c\x12G\n\x07indices\x18\x07 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndexB\x0e\n\x0cquery_filter\"\x8c\x01\n\x13GetValidatorRequest\x12G\n\x05index\x18\x01 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndexH\x00\x12\x1c\n\npublic_key\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38H\x00\x42\x0e\n\x0cquery_filter\"\xd8\x02\n\nValidators\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12L\n\x0evalidator_list\x18\x02 \x03(\x0b\x32\x34.ethereum.eth.v1alpha1.Validators.ValidatorContainer\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\x12\x12\n\ntotal_size\x18\x04 \x01(\x05\x1a\x90\x01\n\x12ValidatorContainer\x12\x45\n\x05index\x18\x01 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x33\n\tvalidator\x18\x02 \x01(\x0b\x32 .ethereum.eth.v1alpha1.Validator\"\x88\x01\n#GetValidatorActiveSetChangesRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x42\x0e\n\x0cquery_filter\"\xb2\x04\n\x10\x41\x63tiveSetChanges\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\'\n\x15\x61\x63tivated_public_keys\x18\x02 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12Q\n\x11\x61\x63tivated_indices\x18\x03 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12$\n\x12\x65xited_public_keys\x18\x04 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12N\n\x0e\x65xited_indices\x18\x05 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12%\n\x13slashed_public_keys\x18\x06 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12O\n\x0fslashed_indices\x18\x07 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12%\n\x13\x65jected_public_keys\x18\x08 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12O\n\x0f\x65jected_indices\x18\t \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\x7f\n\x1bValidatorPerformanceRequest\x12\x17\n\x0bpublic_keys\x18\x01 \x03(\x0c\x42\x02\x18\x01\x12G\n\x07indices\x18\x02 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\xea\x03\n\x1cValidatorPerformanceResponse\x12\"\n\x1a\x63urrent_effective_balances\x18\x01 \x03(\x04\x12\x45\n\x0finclusion_slots\x18\x02 \x03(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12I\n\x13inclusion_distances\x18\x03 \x03(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x1e\n\x16\x63orrectly_voted_source\x18\x04 \x03(\x08\x12\x1e\n\x16\x63orrectly_voted_target\x18\x05 \x03(\x08\x12\x1c\n\x14\x63orrectly_voted_head\x18\x06 \x03(\x08\x12(\n balances_before_epoch_transition\x18\x07 \x03(\x04\x12\'\n\x1f\x62\x61lances_after_epoch_transition\x18\x08 \x03(\x04\x12\x1a\n\x12missing_validators\x18\t \x03(\x0c\x12(\n average_active_validator_balance\x18\n \x01(\x02\x12\x1d\n\x0bpublic_keys\x18\x0b \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\"\xad\x02\n\x0eValidatorQueue\x12\x13\n\x0b\x63hurn_limit\x18\x01 \x01(\x04\x12*\n\x16\x61\x63tivation_public_keys\x18\x02 \x03(\x0c\x42\n\x18\x01\x8a\xb5\x18\x04?,48\x12$\n\x10\x65xit_public_keys\x18\x03 \x03(\x0c\x42\n\x18\x01\x8a\xb5\x18\x04?,48\x12\\\n\x1c\x61\x63tivation_validator_indices\x18\x04 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12V\n\x16\x65xit_validator_indices\x18\x05 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\x93\x02\n\x1fListValidatorAssignmentsRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x12\x1d\n\x0bpublic_keys\x18\x03 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12G\n\x07indices\x18\x04 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x11\n\tpage_size\x18\x05 \x01(\x05\x12\x12\n\npage_token\x18\x06 \x01(\tB\x0e\n\x0cquery_filter\"\x8d\x05\n\x14ValidatorAssignments\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12T\n\x0b\x61ssignments\x18\x02 \x03(\x0b\x32?.ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t\x12\x12\n\ntotal_size\x18\x04 \x01(\x05\x1a\xb3\x03\n\x13\x43ommitteeAssignment\x12Q\n\x11\x62\x65\x61\x63on_committees\x18\x01 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12O\n\x0f\x63ommittee_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\x12\x43\n\rattester_slot\x18\x03 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x44\n\x0eproposer_slots\x18\x04 \x03(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x1c\n\npublic_key\x18\x05 \x01(\x0c\x42\x08\x18\x01\x8a\xb5\x18\x02\x34\x38\x12O\n\x0fvalidator_index\x18\x06 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\x85\x01\n GetValidatorParticipationRequest\x12>\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.EpochH\x00\x12\x11\n\x07genesis\x18\x02 \x01(\x08H\x00\x42\x0e\n\x0cquery_filter\"\xb7\x01\n\x1eValidatorParticipationResponse\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x11\n\tfinalized\x18\x02 \x01(\x08\x12\x44\n\rparticipation\x18\x03 \x01(\x0b\x32-.ethereum.eth.v1alpha1.ValidatorParticipation\"?\n\x16\x41ttestationPoolRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"\x80\x01\n\x17\x41ttestationPoolResponse\x12\x38\n\x0c\x61ttestations\x18\x01 \x03(\x0b\x32\".ethereum.eth.v1alpha1.Attestation\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x05\"~\n\x0c\x42\x65\x61\x63onConfig\x12?\n\x06\x63onfig\x18\x01 \x03(\x0b\x32/.ethereum.eth.v1alpha1.BeaconConfig.ConfigEntry\x1a-\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"i\n\x16SubmitSlashingResponse\x12O\n\x0fslashed_indices\x18\x01 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\xb4\x01\n\x16IndividualVotesRequest\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x13\n\x0bpublic_keys\x18\x02 \x03(\x0c\x12G\n\x07indices\x18\x03 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\xb0\x06\n\x16IndividualVotesRespond\x12V\n\x10individual_votes\x18\x01 \x03(\x0b\x32<.ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote\x1a\xbd\x05\n\x0eIndividualVote\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x12\n\npublic_key\x18\x02 \x01(\x0c\x12O\n\x0fvalidator_index\x18\x03 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12\x12\n\nis_slashed\x18\x04 \x01(\x08\x12(\n is_withdrawable_in_current_epoch\x18\x05 \x01(\x08\x12\"\n\x1ais_active_in_current_epoch\x18\x06 \x01(\x08\x12#\n\x1bis_active_in_previous_epoch\x18\x07 \x01(\x08\x12!\n\x19is_current_epoch_attester\x18\x08 \x01(\x08\x12(\n is_current_epoch_target_attester\x18\t \x01(\x08\x12\"\n\x1ais_previous_epoch_attester\x18\n \x01(\x08\x12)\n!is_previous_epoch_target_attester\x18\x0b \x01(\x08\x12\'\n\x1fis_previous_epoch_head_attester\x18\x0c \x01(\x08\x12,\n$current_epoch_effective_balance_gwei\x18\r \x01(\x04\x12\x44\n\x0einclusion_slot\x18\x0e \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12H\n\x12inclusion_distance\x18\x0f \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\"\x82\x01\n\x1aWeakSubjectivityCheckpoint\x12\x12\n\nblock_root\x18\x01 \x01(\x0c\x12\x12\n\nstate_root\x18\x02 \x01(\x0c\x12<\n\x05\x65poch\x18\x03 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch*V\n\tSetAction\x12\x16\n\x12\x41\x44\x44_VALIDATOR_KEYS\x10\x00\x12\x19\n\x15REMOVE_VALIDATOR_KEYS\x10\x01\x12\x16\n\x12SET_VALIDATOR_KEYS\x10\x02\x32\x93\x1d\n\x0b\x42\x65\x61\x63onChain\x12\x9e\x01\n\x10ListAttestations\x12..ethereum.eth.v1alpha1.ListAttestationsRequest\x1a/.ethereum.eth.v1alpha1.ListAttestationsResponse\")\x82\xd3\xe4\x93\x02#\x12!/eth/v1alpha1/beacon/attestations\x12\xbb\x01\n\x17ListIndexedAttestations\x12\x35.ethereum.eth.v1alpha1.ListIndexedAttestationsRequest\x1a\x36.ethereum.eth.v1alpha1.ListIndexedAttestationsResponse\"1\x82\xd3\xe4\x93\x02+\x12)/eth/v1alpha1/beacon/attestations/indexed\x12\x84\x01\n\x12StreamAttestations\x12\x16.google.protobuf.Empty\x1a\".ethereum.eth.v1alpha1.Attestation\"0\x82\xd3\xe4\x93\x02*\x12(/eth/v1alpha1/beacon/attestations/stream0\x01\x12\x9a\x01\n\x19StreamIndexedAttestations\x12\x16.google.protobuf.Empty\x1a).ethereum.eth.v1alpha1.IndexedAttestation\"8\x82\xd3\xe4\x93\x02\x32\x12\x30/eth/v1alpha1/beacon/attestations/indexed/stream0\x01\x12\xa0\x01\n\x0f\x41ttestationPool\x12-.ethereum.eth.v1alpha1.AttestationPoolRequest\x1a..ethereum.eth.v1alpha1.AttestationPoolResponse\".\x82\xd3\xe4\x93\x02(\x12&/eth/v1alpha1/beacon/attestations/pool\x12\x86\x01\n\nListBlocks\x12(.ethereum.eth.v1alpha1.ListBlocksRequest\x1a).ethereum.eth.v1alpha1.ListBlocksResponse\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/eth/v1alpha1/beacon/blocks\x12\x92\x01\n\x0cStreamBlocks\x12*.ethereum.eth.v1alpha1.StreamBlocksRequest\x1a(.ethereum.eth.v1alpha1.SignedBeaconBlock\"*\x82\xd3\xe4\x93\x02$\x12\"/eth/v1alpha1/beacon/blocks/stream0\x01\x12|\n\x0fStreamChainHead\x12\x16.google.protobuf.Empty\x1a .ethereum.eth.v1alpha1.ChainHead\"-\x82\xd3\xe4\x93\x02\'\x12%/eth/v1alpha1/beacon/chainhead/stream0\x01\x12p\n\x0cGetChainHead\x12\x16.google.protobuf.Empty\x1a .ethereum.eth.v1alpha1.ChainHead\"&\x82\xd3\xe4\x93\x02 \x12\x1e/eth/v1alpha1/beacon/chainhead\x12\xa5\x01\n\x1dGetWeakSubjectivityCheckpoint\x12\x16.google.protobuf.Empty\x1a\x31.ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint\"9\x82\xd3\xe4\x93\x02\x33\x12\x31/eth/v1alpha1/beacon/weak_subjectivity_checkpoint\x12\x96\x01\n\x14ListBeaconCommittees\x12,.ethereum.eth.v1alpha1.ListCommitteesRequest\x1a\'.ethereum.eth.v1alpha1.BeaconCommittees\"\'\x82\xd3\xe4\x93\x02!\x12\x1f/eth/v1alpha1/beacon/committees\x12\xa1\x01\n\x15ListValidatorBalances\x12\x33.ethereum.eth.v1alpha1.ListValidatorBalancesRequest\x1a(.ethereum.eth.v1alpha1.ValidatorBalances\")\x82\xd3\xe4\x93\x02#\x12!/eth/v1alpha1/validators/balances\x12\x83\x01\n\x0eListValidators\x12,.ethereum.eth.v1alpha1.ListValidatorsRequest\x1a!.ethereum.eth.v1alpha1.Validators\" \x82\xd3\xe4\x93\x02\x1a\x12\x18/eth/v1alpha1/validators\x12}\n\x0cGetValidator\x12*.ethereum.eth.v1alpha1.GetValidatorRequest\x1a .ethereum.eth.v1alpha1.Validator\"\x1f\x82\xd3\xe4\x93\x02\x19\x12\x17/eth/v1alpha1/validator\x12\xb6\x01\n\x1cGetValidatorActiveSetChanges\x12:.ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest\x1a\'.ethereum.eth.v1alpha1.ActiveSetChanges\"1\x82\xd3\xe4\x93\x02+\x12)/eth/v1alpha1/validators/activesetchanges\x12z\n\x11GetValidatorQueue\x12\x16.google.protobuf.Empty\x1a%.ethereum.eth.v1alpha1.ValidatorQueue\"&\x82\xd3\xe4\x93\x02 \x12\x1e/eth/v1alpha1/validators/queue\x12\xb0\x01\n\x17GetValidatorPerformance\x12\x32.ethereum.eth.v1alpha1.ValidatorPerformanceRequest\x1a\x33.ethereum.eth.v1alpha1.ValidatorPerformanceResponse\",\x82\xd3\xe4\x93\x02&\x12$/eth/v1alpha1/validators/performance\x12\xad\x01\n\x18ListValidatorAssignments\x12\x36.ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest\x1a+.ethereum.eth.v1alpha1.ValidatorAssignments\",\x82\xd3\xe4\x93\x02&\x12$/eth/v1alpha1/validators/assignments\x12\xbb\x01\n\x19GetValidatorParticipation\x12\x37.ethereum.eth.v1alpha1.GetValidatorParticipationRequest\x1a\x35.ethereum.eth.v1alpha1.ValidatorParticipationResponse\".\x82\xd3\xe4\x93\x02(\x12&/eth/v1alpha1/validators/participation\x12s\n\x0fGetBeaconConfig\x12\x16.google.protobuf.Empty\x1a#.ethereum.eth.v1alpha1.BeaconConfig\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/eth/v1alpha1/beacon/config\x12\xa0\x01\n\x14StreamValidatorsInfo\x12).ethereum.eth.v1alpha1.ValidatorChangeSet\x1a$.ethereum.eth.v1alpha1.ValidatorInfo\"3\x82\xd3\xe4\x93\x02-\x12+/eth/v1alpha1/beacon/validators/info/stream(\x01\x30\x01\x12\xa8\x01\n\x16SubmitAttesterSlashing\x12\'.ethereum.eth.v1alpha1.AttesterSlashing\x1a-.ethereum.eth.v1alpha1.SubmitSlashingResponse\"6\x82\xd3\xe4\x93\x02\x30\x12./eth/v1alpha1/beacon/slashings/attester/submit\x12\xa8\x01\n\x16SubmitProposerSlashing\x12\'.ethereum.eth.v1alpha1.ProposerSlashing\x1a-.ethereum.eth.v1alpha1.SubmitSlashingResponse\"6\x82\xd3\xe4\x93\x02\x30\x12./eth/v1alpha1/beacon/slashings/proposer/submit\x12\xa1\x01\n\x12GetIndividualVotes\x12-.ethereum.eth.v1alpha1.IndividualVotesRequest\x1a-.ethereum.eth.v1alpha1.IndividualVotesRespond\"-\x82\xd3\xe4\x93\x02\'\x12%/eth/v1alpha1/beacon/individual_votesB\x97\x01\n\x19org.ethereum.eth.v1alpha1B\x10\x42\x65\x61\x63onChainProtoP\x01Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\xaa\x02\x15\x45thereum.Eth.v1alpha1\xca\x02\x15\x45thereum\\Eth\\v1alpha1b\x06proto3'
- ,
- dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,eth_dot_ext_dot_options__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_attestation__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_beacon__block__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_validator__pb2.DESCRIPTOR,])
-
-_SETACTION = _descriptor.EnumDescriptor(
- name='SetAction',
- full_name='ethereum.eth.v1alpha1.SetAction',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='ADD_VALIDATOR_KEYS', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='REMOVE_VALIDATOR_KEYS', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='SET_VALIDATOR_KEYS', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=8701,
- serialized_end=8787,
-)
-_sym_db.RegisterEnumDescriptor(_SETACTION)
-
-SetAction = enum_type_wrapper.EnumTypeWrapper(_SETACTION)
-ADD_VALIDATOR_KEYS = 0
-REMOVE_VALIDATOR_KEYS = 1
-SET_VALIDATOR_KEYS = 2
-
-
-
-_VALIDATORCHANGESET = _descriptor.Descriptor(
- name='ValidatorChangeSet',
- full_name='ethereum.eth.v1alpha1.ValidatorChangeSet',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='action', full_name='ethereum.eth.v1alpha1.ValidatorChangeSet.action', index=0,
- number=1, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ValidatorChangeSet.public_keys', index=1,
- number=2, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=235,
- serialized_end=326,
-)
-
-
-_LISTINDEXEDATTESTATIONSREQUEST = _descriptor.Descriptor(
- name='ListIndexedAttestationsRequest',
- full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_epoch', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest.genesis_epoch', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest.page_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest.page_token', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=329,
- serialized_end=505,
-)
-
-
-_LISTATTESTATIONSREQUEST = _descriptor.Descriptor(
- name='ListAttestationsRequest',
- full_name='ethereum.eth.v1alpha1.ListAttestationsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListAttestationsRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_epoch', full_name='ethereum.eth.v1alpha1.ListAttestationsRequest.genesis_epoch', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListAttestationsRequest.page_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListAttestationsRequest.page_token', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListAttestationsRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=508,
- serialized_end=677,
-)
-
-
-_LISTATTESTATIONSRESPONSE = _descriptor.Descriptor(
- name='ListAttestationsResponse',
- full_name='ethereum.eth.v1alpha1.ListAttestationsResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attestations', full_name='ethereum.eth.v1alpha1.ListAttestationsResponse.attestations', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.ListAttestationsResponse.next_page_token', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.ListAttestationsResponse.total_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=680,
- serialized_end=809,
-)
-
-
-_LISTINDEXEDATTESTATIONSRESPONSE = _descriptor.Descriptor(
- name='ListIndexedAttestationsResponse',
- full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='indexed_attestations', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsResponse.indexed_attestations', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsResponse.next_page_token', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.ListIndexedAttestationsResponse.total_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=812,
- serialized_end=963,
-)
-
-
-_LISTBLOCKSREQUEST = _descriptor.Descriptor(
- name='ListBlocksRequest',
- full_name='ethereum.eth.v1alpha1.ListBlocksRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='root', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.slot', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.epoch', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.genesis', index=3,
- number=4, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.page_size', index=4,
- number=5, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.page_token', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListBlocksRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=966,
- serialized_end=1201,
-)
-
-
-_LISTBLOCKSRESPONSE = _descriptor.Descriptor(
- name='ListBlocksResponse',
- full_name='ethereum.eth.v1alpha1.ListBlocksResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='blockContainers', full_name='ethereum.eth.v1alpha1.ListBlocksResponse.blockContainers', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.ListBlocksResponse.next_page_token', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.ListBlocksResponse.total_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1204,
- serialized_end=1339,
-)
-
-
-_STREAMBLOCKSREQUEST = _descriptor.Descriptor(
- name='StreamBlocksRequest',
- full_name='ethereum.eth.v1alpha1.StreamBlocksRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='verified_only', full_name='ethereum.eth.v1alpha1.StreamBlocksRequest.verified_only', index=0,
- number=1, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1341,
- serialized_end=1385,
-)
-
-
-_BEACONBLOCKCONTAINER = _descriptor.Descriptor(
- name='BeaconBlockContainer',
- full_name='ethereum.eth.v1alpha1.BeaconBlockContainer',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='block', full_name='ethereum.eth.v1alpha1.BeaconBlockContainer.block', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='block_root', full_name='ethereum.eth.v1alpha1.BeaconBlockContainer.block_root', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='canonical', full_name='ethereum.eth.v1alpha1.BeaconBlockContainer.canonical', index=2,
- number=3, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1387,
- serialized_end=1505,
-)
-
-
-_CHAINHEAD = _descriptor.Descriptor(
- name='ChainHead',
- full_name='ethereum.eth.v1alpha1.ChainHead',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='head_slot', full_name='ethereum.eth.v1alpha1.ChainHead.head_slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='head_epoch', full_name='ethereum.eth.v1alpha1.ChainHead.head_epoch', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='head_block_root', full_name='ethereum.eth.v1alpha1.ChainHead.head_block_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='finalized_slot', full_name='ethereum.eth.v1alpha1.ChainHead.finalized_slot', index=3,
- number=4, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='finalized_epoch', full_name='ethereum.eth.v1alpha1.ChainHead.finalized_epoch', index=4,
- number=5, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='finalized_block_root', full_name='ethereum.eth.v1alpha1.ChainHead.finalized_block_root', index=5,
- number=6, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='justified_slot', full_name='ethereum.eth.v1alpha1.ChainHead.justified_slot', index=6,
- number=7, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='justified_epoch', full_name='ethereum.eth.v1alpha1.ChainHead.justified_epoch', index=7,
- number=8, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='justified_block_root', full_name='ethereum.eth.v1alpha1.ChainHead.justified_block_root', index=8,
- number=9, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_justified_slot', full_name='ethereum.eth.v1alpha1.ChainHead.previous_justified_slot', index=9,
- number=10, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_justified_epoch', full_name='ethereum.eth.v1alpha1.ChainHead.previous_justified_epoch', index=10,
- number=11, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_justified_block_root', full_name='ethereum.eth.v1alpha1.ChainHead.previous_justified_block_root', index=11,
- number=12, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1508,
- serialized_end=2251,
-)
-
-
-_LISTCOMMITTEESREQUEST = _descriptor.Descriptor(
- name='ListCommitteesRequest',
- full_name='ethereum.eth.v1alpha1.ListCommitteesRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListCommitteesRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.ListCommitteesRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListCommitteesRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=2253,
- serialized_end=2375,
-)
-
-
-_BEACONCOMMITTEES_COMMITTEEITEM = _descriptor.Descriptor(
- name='CommitteeItem',
- full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteeItem',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='validator_indices', full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteeItem.validator_indices', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2569,
- serialized_end=2667,
-)
-
-_BEACONCOMMITTEES_COMMITTEESLIST = _descriptor.Descriptor(
- name='CommitteesList',
- full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteesList',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='committees', full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteesList.committees', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2669,
- serialized_end=2760,
-)
-
-_BEACONCOMMITTEES_COMMITTEESENTRY = _descriptor.Descriptor(
- name='CommitteesEntry',
- full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteesEntry',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='key', full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteesEntry.key', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='value', full_name='ethereum.eth.v1alpha1.BeaconCommittees.CommitteesEntry.value', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=b'8\001',
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2762,
- serialized_end=2867,
-)
-
-_BEACONCOMMITTEES = _descriptor.Descriptor(
- name='BeaconCommittees',
- full_name='ethereum.eth.v1alpha1.BeaconCommittees',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.BeaconCommittees.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committees', full_name='ethereum.eth.v1alpha1.BeaconCommittees.committees', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='active_validator_count', full_name='ethereum.eth.v1alpha1.BeaconCommittees.active_validator_count', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_BEACONCOMMITTEES_COMMITTEEITEM, _BEACONCOMMITTEES_COMMITTEESLIST, _BEACONCOMMITTEES_COMMITTEESENTRY, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2378,
- serialized_end=2867,
-)
-
-
-_LISTVALIDATORBALANCESREQUEST = _descriptor.Descriptor(
- name='ListValidatorBalancesRequest',
- full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.public_keys', index=2,
- number=3, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.indices', index=3,
- number=4, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.page_size', index=4,
- number=5, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.page_token', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListValidatorBalancesRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=2870,
- serialized_end=3142,
-)
-
-
-_VALIDATORBALANCES_BALANCE = _descriptor.Descriptor(
- name='Balance',
- full_name='ethereum.eth.v1alpha1.ValidatorBalances.Balance',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorBalances.Balance.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.ValidatorBalances.Balance.index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='balance', full_name='ethereum.eth.v1alpha1.ValidatorBalances.Balance.balance', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='status', full_name='ethereum.eth.v1alpha1.ValidatorBalances.Balance.status', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3342,
- serialized_end=3483,
-)
-
-_VALIDATORBALANCES = _descriptor.Descriptor(
- name='ValidatorBalances',
- full_name='ethereum.eth.v1alpha1.ValidatorBalances',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ValidatorBalances.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='balances', full_name='ethereum.eth.v1alpha1.ValidatorBalances.balances', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.ValidatorBalances.next_page_token', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.ValidatorBalances.total_size', index=3,
- number=4, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_VALIDATORBALANCES_BALANCE, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3145,
- serialized_end=3483,
-)
-
-
-_LISTVALIDATORSREQUEST = _descriptor.Descriptor(
- name='ListValidatorsRequest',
- full_name='ethereum.eth.v1alpha1.ListValidatorsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='active', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.active', index=2,
- number=3, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.page_size', index=3,
- number=4, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.page_token', index=4,
- number=5, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.public_keys', index=5,
- number=6, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.indices', index=6,
- number=7, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListValidatorsRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=3486,
- serialized_end=3757,
-)
-
-
-_GETVALIDATORREQUEST = _descriptor.Descriptor(
- name='GetValidatorRequest',
- full_name='ethereum.eth.v1alpha1.GetValidatorRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.GetValidatorRequest.index', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.GetValidatorRequest.public_key', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.GetValidatorRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=3760,
- serialized_end=3900,
-)
-
-
-_VALIDATORS_VALIDATORCONTAINER = _descriptor.Descriptor(
- name='ValidatorContainer',
- full_name='ethereum.eth.v1alpha1.Validators.ValidatorContainer',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.Validators.ValidatorContainer.index', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator', full_name='ethereum.eth.v1alpha1.Validators.ValidatorContainer.validator', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4103,
- serialized_end=4247,
-)
-
-_VALIDATORS = _descriptor.Descriptor(
- name='Validators',
- full_name='ethereum.eth.v1alpha1.Validators',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.Validators.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator_list', full_name='ethereum.eth.v1alpha1.Validators.validator_list', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.Validators.next_page_token', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.Validators.total_size', index=3,
- number=4, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_VALIDATORS_VALIDATORCONTAINER, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3903,
- serialized_end=4247,
-)
-
-
-_GETVALIDATORACTIVESETCHANGESREQUEST = _descriptor.Descriptor(
- name='GetValidatorActiveSetChangesRequest',
- full_name='ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=4250,
- serialized_end=4386,
-)
-
-
-_ACTIVESETCHANGES = _descriptor.Descriptor(
- name='ActiveSetChanges',
- full_name='ethereum.eth.v1alpha1.ActiveSetChanges',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activated_public_keys', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.activated_public_keys', index=1,
- number=2, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activated_indices', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.activated_indices', index=2,
- number=3, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='exited_public_keys', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.exited_public_keys', index=3,
- number=4, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='exited_indices', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.exited_indices', index=4,
- number=5, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='slashed_public_keys', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.slashed_public_keys', index=5,
- number=6, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='slashed_indices', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.slashed_indices', index=6,
- number=7, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ejected_public_keys', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.ejected_public_keys', index=7,
- number=8, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ejected_indices', full_name='ethereum.eth.v1alpha1.ActiveSetChanges.ejected_indices', index=8,
- number=9, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4389,
- serialized_end=4951,
-)
-
-
-_VALIDATORPERFORMANCEREQUEST = _descriptor.Descriptor(
- name='ValidatorPerformanceRequest',
- full_name='ethereum.eth.v1alpha1.ValidatorPerformanceRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceRequest.public_keys', index=0,
- number=1, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceRequest.indices', index=1,
- number=2, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4953,
- serialized_end=5080,
-)
-
-
-_VALIDATORPERFORMANCERESPONSE = _descriptor.Descriptor(
- name='ValidatorPerformanceResponse',
- full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='current_effective_balances', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.current_effective_balances', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='inclusion_slots', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.inclusion_slots', index=1,
- number=2, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='inclusion_distances', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.inclusion_distances', index=2,
- number=3, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='correctly_voted_source', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.correctly_voted_source', index=3,
- number=4, type=8, cpp_type=7, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='correctly_voted_target', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.correctly_voted_target', index=4,
- number=5, type=8, cpp_type=7, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='correctly_voted_head', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.correctly_voted_head', index=5,
- number=6, type=8, cpp_type=7, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='balances_before_epoch_transition', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.balances_before_epoch_transition', index=6,
- number=7, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='balances_after_epoch_transition', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.balances_after_epoch_transition', index=7,
- number=8, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='missing_validators', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.missing_validators', index=8,
- number=9, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='average_active_validator_balance', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.average_active_validator_balance', index=9,
- number=10, type=2, cpp_type=6, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ValidatorPerformanceResponse.public_keys', index=10,
- number=11, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5083,
- serialized_end=5573,
-)
-
-
-_VALIDATORQUEUE = _descriptor.Descriptor(
- name='ValidatorQueue',
- full_name='ethereum.eth.v1alpha1.ValidatorQueue',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='churn_limit', full_name='ethereum.eth.v1alpha1.ValidatorQueue.churn_limit', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activation_public_keys', full_name='ethereum.eth.v1alpha1.ValidatorQueue.activation_public_keys', index=1,
- number=2, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='exit_public_keys', full_name='ethereum.eth.v1alpha1.ValidatorQueue.exit_public_keys', index=2,
- number=3, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activation_validator_indices', full_name='ethereum.eth.v1alpha1.ValidatorQueue.activation_validator_indices', index=3,
- number=4, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='exit_validator_indices', full_name='ethereum.eth.v1alpha1.ValidatorQueue.exit_validator_indices', index=4,
- number=5, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=5576,
- serialized_end=5877,
-)
-
-
-_LISTVALIDATORASSIGNMENTSREQUEST = _descriptor.Descriptor(
- name='ListValidatorAssignmentsRequest',
- full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.public_keys', index=2,
- number=3, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.indices', index=3,
- number=4, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.page_size', index=4,
- number=5, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.page_token', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=5880,
- serialized_end=6155,
-)
-
-
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT = _descriptor.Descriptor(
- name='CommitteeAssignment',
- full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='beacon_committees', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.beacon_committees', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_index', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.committee_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='attester_slot', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.attester_slot', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='proposer_slots', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.proposer_slots', index=3,
- number=4, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.public_key', index=4,
- number=5, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator_index', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment.validator_index', index=5,
- number=6, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=6376,
- serialized_end=6811,
-)
-
-_VALIDATORASSIGNMENTS = _descriptor.Descriptor(
- name='ValidatorAssignments',
- full_name='ethereum.eth.v1alpha1.ValidatorAssignments',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='assignments', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.assignments', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.next_page_token', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.ValidatorAssignments.total_size', index=3,
- number=4, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=6158,
- serialized_end=6811,
-)
-
-
-_GETVALIDATORPARTICIPATIONREQUEST = _descriptor.Descriptor(
- name='GetValidatorParticipationRequest',
- full_name='ethereum.eth.v1alpha1.GetValidatorParticipationRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.GetValidatorParticipationRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis', full_name='ethereum.eth.v1alpha1.GetValidatorParticipationRequest.genesis', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='query_filter', full_name='ethereum.eth.v1alpha1.GetValidatorParticipationRequest.query_filter',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=6814,
- serialized_end=6947,
-)
-
-
-_VALIDATORPARTICIPATIONRESPONSE = _descriptor.Descriptor(
- name='ValidatorParticipationResponse',
- full_name='ethereum.eth.v1alpha1.ValidatorParticipationResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ValidatorParticipationResponse.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='finalized', full_name='ethereum.eth.v1alpha1.ValidatorParticipationResponse.finalized', index=1,
- number=2, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='participation', full_name='ethereum.eth.v1alpha1.ValidatorParticipationResponse.participation', index=2,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=6950,
- serialized_end=7133,
-)
-
-
-_ATTESTATIONPOOLREQUEST = _descriptor.Descriptor(
- name='AttestationPoolRequest',
- full_name='ethereum.eth.v1alpha1.AttestationPoolRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='page_size', full_name='ethereum.eth.v1alpha1.AttestationPoolRequest.page_size', index=0,
- number=1, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='page_token', full_name='ethereum.eth.v1alpha1.AttestationPoolRequest.page_token', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7135,
- serialized_end=7198,
-)
-
-
-_ATTESTATIONPOOLRESPONSE = _descriptor.Descriptor(
- name='AttestationPoolResponse',
- full_name='ethereum.eth.v1alpha1.AttestationPoolResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attestations', full_name='ethereum.eth.v1alpha1.AttestationPoolResponse.attestations', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_page_token', full_name='ethereum.eth.v1alpha1.AttestationPoolResponse.next_page_token', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='total_size', full_name='ethereum.eth.v1alpha1.AttestationPoolResponse.total_size', index=2,
- number=3, type=5, cpp_type=1, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7201,
- serialized_end=7329,
-)
-
-
-_BEACONCONFIG_CONFIGENTRY = _descriptor.Descriptor(
- name='ConfigEntry',
- full_name='ethereum.eth.v1alpha1.BeaconConfig.ConfigEntry',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='key', full_name='ethereum.eth.v1alpha1.BeaconConfig.ConfigEntry.key', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='value', full_name='ethereum.eth.v1alpha1.BeaconConfig.ConfigEntry.value', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=b'8\001',
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7412,
- serialized_end=7457,
-)
-
-_BEACONCONFIG = _descriptor.Descriptor(
- name='BeaconConfig',
- full_name='ethereum.eth.v1alpha1.BeaconConfig',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='config', full_name='ethereum.eth.v1alpha1.BeaconConfig.config', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_BEACONCONFIG_CONFIGENTRY, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7331,
- serialized_end=7457,
-)
-
-
-_SUBMITSLASHINGRESPONSE = _descriptor.Descriptor(
- name='SubmitSlashingResponse',
- full_name='ethereum.eth.v1alpha1.SubmitSlashingResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slashed_indices', full_name='ethereum.eth.v1alpha1.SubmitSlashingResponse.slashed_indices', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7459,
- serialized_end=7564,
-)
-
-
-_INDIVIDUALVOTESREQUEST = _descriptor.Descriptor(
- name='IndividualVotesRequest',
- full_name='ethereum.eth.v1alpha1.IndividualVotesRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.IndividualVotesRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.IndividualVotesRequest.public_keys', index=1,
- number=2, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.IndividualVotesRequest.indices', index=2,
- number=3, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7567,
- serialized_end=7747,
-)
-
-
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE = _descriptor.Descriptor(
- name='IndividualVote',
- full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.public_key', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator_index', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.validator_index', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_slashed', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_slashed', index=3,
- number=4, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_withdrawable_in_current_epoch', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_withdrawable_in_current_epoch', index=4,
- number=5, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_active_in_current_epoch', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_active_in_current_epoch', index=5,
- number=6, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_active_in_previous_epoch', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_active_in_previous_epoch', index=6,
- number=7, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_current_epoch_attester', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_current_epoch_attester', index=7,
- number=8, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_current_epoch_target_attester', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_current_epoch_target_attester', index=8,
- number=9, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_previous_epoch_attester', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_previous_epoch_attester', index=9,
- number=10, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_previous_epoch_target_attester', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_previous_epoch_target_attester', index=10,
- number=11, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_previous_epoch_head_attester', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.is_previous_epoch_head_attester', index=11,
- number=12, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='current_epoch_effective_balance_gwei', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.current_epoch_effective_balance_gwei', index=12,
- number=13, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='inclusion_slot', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.inclusion_slot', index=13,
- number=14, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='inclusion_distance', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote.inclusion_distance', index=14,
- number=15, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7865,
- serialized_end=8566,
-)
-
-_INDIVIDUALVOTESRESPOND = _descriptor.Descriptor(
- name='IndividualVotesRespond',
- full_name='ethereum.eth.v1alpha1.IndividualVotesRespond',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='individual_votes', full_name='ethereum.eth.v1alpha1.IndividualVotesRespond.individual_votes', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=7750,
- serialized_end=8566,
-)
-
-
-_WEAKSUBJECTIVITYCHECKPOINT = _descriptor.Descriptor(
- name='WeakSubjectivityCheckpoint',
- full_name='ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='block_root', full_name='ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint.block_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='state_root', full_name='ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint.state_root', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint.epoch', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=8569,
- serialized_end=8699,
-)
-
-_VALIDATORCHANGESET.fields_by_name['action'].enum_type = _SETACTION
-_LISTINDEXEDATTESTATIONSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTINDEXEDATTESTATIONSREQUEST.fields_by_name['epoch'])
-_LISTINDEXEDATTESTATIONSREQUEST.fields_by_name['epoch'].containing_oneof = _LISTINDEXEDATTESTATIONSREQUEST.oneofs_by_name['query_filter']
-_LISTINDEXEDATTESTATIONSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTINDEXEDATTESTATIONSREQUEST.fields_by_name['genesis_epoch'])
-_LISTINDEXEDATTESTATIONSREQUEST.fields_by_name['genesis_epoch'].containing_oneof = _LISTINDEXEDATTESTATIONSREQUEST.oneofs_by_name['query_filter']
-_LISTATTESTATIONSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTATTESTATIONSREQUEST.fields_by_name['epoch'])
-_LISTATTESTATIONSREQUEST.fields_by_name['epoch'].containing_oneof = _LISTATTESTATIONSREQUEST.oneofs_by_name['query_filter']
-_LISTATTESTATIONSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTATTESTATIONSREQUEST.fields_by_name['genesis_epoch'])
-_LISTATTESTATIONSREQUEST.fields_by_name['genesis_epoch'].containing_oneof = _LISTATTESTATIONSREQUEST.oneofs_by_name['query_filter']
-_LISTATTESTATIONSRESPONSE.fields_by_name['attestations'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATION
-_LISTINDEXEDATTESTATIONSRESPONSE.fields_by_name['indexed_attestations'].message_type = eth_dot_v1alpha1_dot_beacon__block__pb2._INDEXEDATTESTATION
-_LISTBLOCKSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTBLOCKSREQUEST.fields_by_name['root'])
-_LISTBLOCKSREQUEST.fields_by_name['root'].containing_oneof = _LISTBLOCKSREQUEST.oneofs_by_name['query_filter']
-_LISTBLOCKSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTBLOCKSREQUEST.fields_by_name['slot'])
-_LISTBLOCKSREQUEST.fields_by_name['slot'].containing_oneof = _LISTBLOCKSREQUEST.oneofs_by_name['query_filter']
-_LISTBLOCKSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTBLOCKSREQUEST.fields_by_name['epoch'])
-_LISTBLOCKSREQUEST.fields_by_name['epoch'].containing_oneof = _LISTBLOCKSREQUEST.oneofs_by_name['query_filter']
-_LISTBLOCKSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTBLOCKSREQUEST.fields_by_name['genesis'])
-_LISTBLOCKSREQUEST.fields_by_name['genesis'].containing_oneof = _LISTBLOCKSREQUEST.oneofs_by_name['query_filter']
-_LISTBLOCKSRESPONSE.fields_by_name['blockContainers'].message_type = _BEACONBLOCKCONTAINER
-_BEACONBLOCKCONTAINER.fields_by_name['block'].message_type = eth_dot_v1alpha1_dot_beacon__block__pb2._SIGNEDBEACONBLOCK
-_LISTCOMMITTEESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTCOMMITTEESREQUEST.fields_by_name['epoch'])
-_LISTCOMMITTEESREQUEST.fields_by_name['epoch'].containing_oneof = _LISTCOMMITTEESREQUEST.oneofs_by_name['query_filter']
-_LISTCOMMITTEESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTCOMMITTEESREQUEST.fields_by_name['genesis'])
-_LISTCOMMITTEESREQUEST.fields_by_name['genesis'].containing_oneof = _LISTCOMMITTEESREQUEST.oneofs_by_name['query_filter']
-_BEACONCOMMITTEES_COMMITTEEITEM.containing_type = _BEACONCOMMITTEES
-_BEACONCOMMITTEES_COMMITTEESLIST.fields_by_name['committees'].message_type = _BEACONCOMMITTEES_COMMITTEEITEM
-_BEACONCOMMITTEES_COMMITTEESLIST.containing_type = _BEACONCOMMITTEES
-_BEACONCOMMITTEES_COMMITTEESENTRY.fields_by_name['value'].message_type = _BEACONCOMMITTEES_COMMITTEESLIST
-_BEACONCOMMITTEES_COMMITTEESENTRY.containing_type = _BEACONCOMMITTEES
-_BEACONCOMMITTEES.fields_by_name['committees'].message_type = _BEACONCOMMITTEES_COMMITTEESENTRY
-_LISTVALIDATORBALANCESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORBALANCESREQUEST.fields_by_name['epoch'])
-_LISTVALIDATORBALANCESREQUEST.fields_by_name['epoch'].containing_oneof = _LISTVALIDATORBALANCESREQUEST.oneofs_by_name['query_filter']
-_LISTVALIDATORBALANCESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORBALANCESREQUEST.fields_by_name['genesis'])
-_LISTVALIDATORBALANCESREQUEST.fields_by_name['genesis'].containing_oneof = _LISTVALIDATORBALANCESREQUEST.oneofs_by_name['query_filter']
-_VALIDATORBALANCES_BALANCE.containing_type = _VALIDATORBALANCES
-_VALIDATORBALANCES.fields_by_name['balances'].message_type = _VALIDATORBALANCES_BALANCE
-_LISTVALIDATORSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORSREQUEST.fields_by_name['epoch'])
-_LISTVALIDATORSREQUEST.fields_by_name['epoch'].containing_oneof = _LISTVALIDATORSREQUEST.oneofs_by_name['query_filter']
-_LISTVALIDATORSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORSREQUEST.fields_by_name['genesis'])
-_LISTVALIDATORSREQUEST.fields_by_name['genesis'].containing_oneof = _LISTVALIDATORSREQUEST.oneofs_by_name['query_filter']
-_GETVALIDATORREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORREQUEST.fields_by_name['index'])
-_GETVALIDATORREQUEST.fields_by_name['index'].containing_oneof = _GETVALIDATORREQUEST.oneofs_by_name['query_filter']
-_GETVALIDATORREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORREQUEST.fields_by_name['public_key'])
-_GETVALIDATORREQUEST.fields_by_name['public_key'].containing_oneof = _GETVALIDATORREQUEST.oneofs_by_name['query_filter']
-_VALIDATORS_VALIDATORCONTAINER.fields_by_name['validator'].message_type = eth_dot_v1alpha1_dot_validator__pb2._VALIDATOR
-_VALIDATORS_VALIDATORCONTAINER.containing_type = _VALIDATORS
-_VALIDATORS.fields_by_name['validator_list'].message_type = _VALIDATORS_VALIDATORCONTAINER
-_GETVALIDATORACTIVESETCHANGESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORACTIVESETCHANGESREQUEST.fields_by_name['epoch'])
-_GETVALIDATORACTIVESETCHANGESREQUEST.fields_by_name['epoch'].containing_oneof = _GETVALIDATORACTIVESETCHANGESREQUEST.oneofs_by_name['query_filter']
-_GETVALIDATORACTIVESETCHANGESREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORACTIVESETCHANGESREQUEST.fields_by_name['genesis'])
-_GETVALIDATORACTIVESETCHANGESREQUEST.fields_by_name['genesis'].containing_oneof = _GETVALIDATORACTIVESETCHANGESREQUEST.oneofs_by_name['query_filter']
-_LISTVALIDATORASSIGNMENTSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['epoch'])
-_LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['epoch'].containing_oneof = _LISTVALIDATORASSIGNMENTSREQUEST.oneofs_by_name['query_filter']
-_LISTVALIDATORASSIGNMENTSREQUEST.oneofs_by_name['query_filter'].fields.append(
- _LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['genesis'])
-_LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['genesis'].containing_oneof = _LISTVALIDATORASSIGNMENTSREQUEST.oneofs_by_name['query_filter']
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.containing_type = _VALIDATORASSIGNMENTS
-_VALIDATORASSIGNMENTS.fields_by_name['assignments'].message_type = _VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT
-_GETVALIDATORPARTICIPATIONREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORPARTICIPATIONREQUEST.fields_by_name['epoch'])
-_GETVALIDATORPARTICIPATIONREQUEST.fields_by_name['epoch'].containing_oneof = _GETVALIDATORPARTICIPATIONREQUEST.oneofs_by_name['query_filter']
-_GETVALIDATORPARTICIPATIONREQUEST.oneofs_by_name['query_filter'].fields.append(
- _GETVALIDATORPARTICIPATIONREQUEST.fields_by_name['genesis'])
-_GETVALIDATORPARTICIPATIONREQUEST.fields_by_name['genesis'].containing_oneof = _GETVALIDATORPARTICIPATIONREQUEST.oneofs_by_name['query_filter']
-_VALIDATORPARTICIPATIONRESPONSE.fields_by_name['participation'].message_type = eth_dot_v1alpha1_dot_validator__pb2._VALIDATORPARTICIPATION
-_ATTESTATIONPOOLRESPONSE.fields_by_name['attestations'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATION
-_BEACONCONFIG_CONFIGENTRY.containing_type = _BEACONCONFIG
-_BEACONCONFIG.fields_by_name['config'].message_type = _BEACONCONFIG_CONFIGENTRY
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE.containing_type = _INDIVIDUALVOTESRESPOND
-_INDIVIDUALVOTESRESPOND.fields_by_name['individual_votes'].message_type = _INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE
-DESCRIPTOR.message_types_by_name['ValidatorChangeSet'] = _VALIDATORCHANGESET
-DESCRIPTOR.message_types_by_name['ListIndexedAttestationsRequest'] = _LISTINDEXEDATTESTATIONSREQUEST
-DESCRIPTOR.message_types_by_name['ListAttestationsRequest'] = _LISTATTESTATIONSREQUEST
-DESCRIPTOR.message_types_by_name['ListAttestationsResponse'] = _LISTATTESTATIONSRESPONSE
-DESCRIPTOR.message_types_by_name['ListIndexedAttestationsResponse'] = _LISTINDEXEDATTESTATIONSRESPONSE
-DESCRIPTOR.message_types_by_name['ListBlocksRequest'] = _LISTBLOCKSREQUEST
-DESCRIPTOR.message_types_by_name['ListBlocksResponse'] = _LISTBLOCKSRESPONSE
-DESCRIPTOR.message_types_by_name['StreamBlocksRequest'] = _STREAMBLOCKSREQUEST
-DESCRIPTOR.message_types_by_name['BeaconBlockContainer'] = _BEACONBLOCKCONTAINER
-DESCRIPTOR.message_types_by_name['ChainHead'] = _CHAINHEAD
-DESCRIPTOR.message_types_by_name['ListCommitteesRequest'] = _LISTCOMMITTEESREQUEST
-DESCRIPTOR.message_types_by_name['BeaconCommittees'] = _BEACONCOMMITTEES
-DESCRIPTOR.message_types_by_name['ListValidatorBalancesRequest'] = _LISTVALIDATORBALANCESREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorBalances'] = _VALIDATORBALANCES
-DESCRIPTOR.message_types_by_name['ListValidatorsRequest'] = _LISTVALIDATORSREQUEST
-DESCRIPTOR.message_types_by_name['GetValidatorRequest'] = _GETVALIDATORREQUEST
-DESCRIPTOR.message_types_by_name['Validators'] = _VALIDATORS
-DESCRIPTOR.message_types_by_name['GetValidatorActiveSetChangesRequest'] = _GETVALIDATORACTIVESETCHANGESREQUEST
-DESCRIPTOR.message_types_by_name['ActiveSetChanges'] = _ACTIVESETCHANGES
-DESCRIPTOR.message_types_by_name['ValidatorPerformanceRequest'] = _VALIDATORPERFORMANCEREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorPerformanceResponse'] = _VALIDATORPERFORMANCERESPONSE
-DESCRIPTOR.message_types_by_name['ValidatorQueue'] = _VALIDATORQUEUE
-DESCRIPTOR.message_types_by_name['ListValidatorAssignmentsRequest'] = _LISTVALIDATORASSIGNMENTSREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorAssignments'] = _VALIDATORASSIGNMENTS
-DESCRIPTOR.message_types_by_name['GetValidatorParticipationRequest'] = _GETVALIDATORPARTICIPATIONREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorParticipationResponse'] = _VALIDATORPARTICIPATIONRESPONSE
-DESCRIPTOR.message_types_by_name['AttestationPoolRequest'] = _ATTESTATIONPOOLREQUEST
-DESCRIPTOR.message_types_by_name['AttestationPoolResponse'] = _ATTESTATIONPOOLRESPONSE
-DESCRIPTOR.message_types_by_name['BeaconConfig'] = _BEACONCONFIG
-DESCRIPTOR.message_types_by_name['SubmitSlashingResponse'] = _SUBMITSLASHINGRESPONSE
-DESCRIPTOR.message_types_by_name['IndividualVotesRequest'] = _INDIVIDUALVOTESREQUEST
-DESCRIPTOR.message_types_by_name['IndividualVotesRespond'] = _INDIVIDUALVOTESRESPOND
-DESCRIPTOR.message_types_by_name['WeakSubjectivityCheckpoint'] = _WEAKSUBJECTIVITYCHECKPOINT
-DESCRIPTOR.enum_types_by_name['SetAction'] = _SETACTION
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-ValidatorChangeSet = _reflection.GeneratedProtocolMessageType('ValidatorChangeSet', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORCHANGESET,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorChangeSet)
- })
-_sym_db.RegisterMessage(ValidatorChangeSet)
-
-ListIndexedAttestationsRequest = _reflection.GeneratedProtocolMessageType('ListIndexedAttestationsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTINDEXEDATTESTATIONSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListIndexedAttestationsRequest)
- })
-_sym_db.RegisterMessage(ListIndexedAttestationsRequest)
-
-ListAttestationsRequest = _reflection.GeneratedProtocolMessageType('ListAttestationsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTATTESTATIONSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListAttestationsRequest)
- })
-_sym_db.RegisterMessage(ListAttestationsRequest)
-
-ListAttestationsResponse = _reflection.GeneratedProtocolMessageType('ListAttestationsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _LISTATTESTATIONSRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListAttestationsResponse)
- })
-_sym_db.RegisterMessage(ListAttestationsResponse)
-
-ListIndexedAttestationsResponse = _reflection.GeneratedProtocolMessageType('ListIndexedAttestationsResponse', (_message.Message,), {
- 'DESCRIPTOR' : _LISTINDEXEDATTESTATIONSRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListIndexedAttestationsResponse)
- })
-_sym_db.RegisterMessage(ListIndexedAttestationsResponse)
-
-ListBlocksRequest = _reflection.GeneratedProtocolMessageType('ListBlocksRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTBLOCKSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListBlocksRequest)
- })
-_sym_db.RegisterMessage(ListBlocksRequest)
-
-ListBlocksResponse = _reflection.GeneratedProtocolMessageType('ListBlocksResponse', (_message.Message,), {
- 'DESCRIPTOR' : _LISTBLOCKSRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListBlocksResponse)
- })
-_sym_db.RegisterMessage(ListBlocksResponse)
-
-StreamBlocksRequest = _reflection.GeneratedProtocolMessageType('StreamBlocksRequest', (_message.Message,), {
- 'DESCRIPTOR' : _STREAMBLOCKSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.StreamBlocksRequest)
- })
-_sym_db.RegisterMessage(StreamBlocksRequest)
-
-BeaconBlockContainer = _reflection.GeneratedProtocolMessageType('BeaconBlockContainer', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONBLOCKCONTAINER,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconBlockContainer)
- })
-_sym_db.RegisterMessage(BeaconBlockContainer)
-
-ChainHead = _reflection.GeneratedProtocolMessageType('ChainHead', (_message.Message,), {
- 'DESCRIPTOR' : _CHAINHEAD,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ChainHead)
- })
-_sym_db.RegisterMessage(ChainHead)
-
-ListCommitteesRequest = _reflection.GeneratedProtocolMessageType('ListCommitteesRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTCOMMITTEESREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListCommitteesRequest)
- })
-_sym_db.RegisterMessage(ListCommitteesRequest)
-
-BeaconCommittees = _reflection.GeneratedProtocolMessageType('BeaconCommittees', (_message.Message,), {
-
- 'CommitteeItem' : _reflection.GeneratedProtocolMessageType('CommitteeItem', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONCOMMITTEES_COMMITTEEITEM,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconCommittees.CommitteeItem)
- })
- ,
-
- 'CommitteesList' : _reflection.GeneratedProtocolMessageType('CommitteesList', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONCOMMITTEES_COMMITTEESLIST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconCommittees.CommitteesList)
- })
- ,
-
- 'CommitteesEntry' : _reflection.GeneratedProtocolMessageType('CommitteesEntry', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONCOMMITTEES_COMMITTEESENTRY,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconCommittees.CommitteesEntry)
- })
- ,
- 'DESCRIPTOR' : _BEACONCOMMITTEES,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconCommittees)
- })
-_sym_db.RegisterMessage(BeaconCommittees)
-_sym_db.RegisterMessage(BeaconCommittees.CommitteeItem)
-_sym_db.RegisterMessage(BeaconCommittees.CommitteesList)
-_sym_db.RegisterMessage(BeaconCommittees.CommitteesEntry)
-
-ListValidatorBalancesRequest = _reflection.GeneratedProtocolMessageType('ListValidatorBalancesRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTVALIDATORBALANCESREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListValidatorBalancesRequest)
- })
-_sym_db.RegisterMessage(ListValidatorBalancesRequest)
-
-ValidatorBalances = _reflection.GeneratedProtocolMessageType('ValidatorBalances', (_message.Message,), {
-
- 'Balance' : _reflection.GeneratedProtocolMessageType('Balance', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORBALANCES_BALANCE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorBalances.Balance)
- })
- ,
- 'DESCRIPTOR' : _VALIDATORBALANCES,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorBalances)
- })
-_sym_db.RegisterMessage(ValidatorBalances)
-_sym_db.RegisterMessage(ValidatorBalances.Balance)
-
-ListValidatorsRequest = _reflection.GeneratedProtocolMessageType('ListValidatorsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTVALIDATORSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListValidatorsRequest)
- })
-_sym_db.RegisterMessage(ListValidatorsRequest)
-
-GetValidatorRequest = _reflection.GeneratedProtocolMessageType('GetValidatorRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETVALIDATORREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.GetValidatorRequest)
- })
-_sym_db.RegisterMessage(GetValidatorRequest)
-
-Validators = _reflection.GeneratedProtocolMessageType('Validators', (_message.Message,), {
-
- 'ValidatorContainer' : _reflection.GeneratedProtocolMessageType('ValidatorContainer', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORS_VALIDATORCONTAINER,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Validators.ValidatorContainer)
- })
- ,
- 'DESCRIPTOR' : _VALIDATORS,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Validators)
- })
-_sym_db.RegisterMessage(Validators)
-_sym_db.RegisterMessage(Validators.ValidatorContainer)
-
-GetValidatorActiveSetChangesRequest = _reflection.GeneratedProtocolMessageType('GetValidatorActiveSetChangesRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETVALIDATORACTIVESETCHANGESREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.GetValidatorActiveSetChangesRequest)
- })
-_sym_db.RegisterMessage(GetValidatorActiveSetChangesRequest)
-
-ActiveSetChanges = _reflection.GeneratedProtocolMessageType('ActiveSetChanges', (_message.Message,), {
- 'DESCRIPTOR' : _ACTIVESETCHANGES,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ActiveSetChanges)
- })
-_sym_db.RegisterMessage(ActiveSetChanges)
-
-ValidatorPerformanceRequest = _reflection.GeneratedProtocolMessageType('ValidatorPerformanceRequest', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORPERFORMANCEREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorPerformanceRequest)
- })
-_sym_db.RegisterMessage(ValidatorPerformanceRequest)
-
-ValidatorPerformanceResponse = _reflection.GeneratedProtocolMessageType('ValidatorPerformanceResponse', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORPERFORMANCERESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorPerformanceResponse)
- })
-_sym_db.RegisterMessage(ValidatorPerformanceResponse)
-
-ValidatorQueue = _reflection.GeneratedProtocolMessageType('ValidatorQueue', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORQUEUE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorQueue)
- })
-_sym_db.RegisterMessage(ValidatorQueue)
-
-ListValidatorAssignmentsRequest = _reflection.GeneratedProtocolMessageType('ListValidatorAssignmentsRequest', (_message.Message,), {
- 'DESCRIPTOR' : _LISTVALIDATORASSIGNMENTSREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ListValidatorAssignmentsRequest)
- })
-_sym_db.RegisterMessage(ListValidatorAssignmentsRequest)
-
-ValidatorAssignments = _reflection.GeneratedProtocolMessageType('ValidatorAssignments', (_message.Message,), {
-
- 'CommitteeAssignment' : _reflection.GeneratedProtocolMessageType('CommitteeAssignment', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorAssignments.CommitteeAssignment)
- })
- ,
- 'DESCRIPTOR' : _VALIDATORASSIGNMENTS,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorAssignments)
- })
-_sym_db.RegisterMessage(ValidatorAssignments)
-_sym_db.RegisterMessage(ValidatorAssignments.CommitteeAssignment)
-
-GetValidatorParticipationRequest = _reflection.GeneratedProtocolMessageType('GetValidatorParticipationRequest', (_message.Message,), {
- 'DESCRIPTOR' : _GETVALIDATORPARTICIPATIONREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.GetValidatorParticipationRequest)
- })
-_sym_db.RegisterMessage(GetValidatorParticipationRequest)
-
-ValidatorParticipationResponse = _reflection.GeneratedProtocolMessageType('ValidatorParticipationResponse', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORPARTICIPATIONRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorParticipationResponse)
- })
-_sym_db.RegisterMessage(ValidatorParticipationResponse)
-
-AttestationPoolRequest = _reflection.GeneratedProtocolMessageType('AttestationPoolRequest', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTATIONPOOLREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttestationPoolRequest)
- })
-_sym_db.RegisterMessage(AttestationPoolRequest)
-
-AttestationPoolResponse = _reflection.GeneratedProtocolMessageType('AttestationPoolResponse', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTATIONPOOLRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttestationPoolResponse)
- })
-_sym_db.RegisterMessage(AttestationPoolResponse)
-
-BeaconConfig = _reflection.GeneratedProtocolMessageType('BeaconConfig', (_message.Message,), {
-
- 'ConfigEntry' : _reflection.GeneratedProtocolMessageType('ConfigEntry', (_message.Message,), {
- 'DESCRIPTOR' : _BEACONCONFIG_CONFIGENTRY,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconConfig.ConfigEntry)
- })
- ,
- 'DESCRIPTOR' : _BEACONCONFIG,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BeaconConfig)
- })
-_sym_db.RegisterMessage(BeaconConfig)
-_sym_db.RegisterMessage(BeaconConfig.ConfigEntry)
-
-SubmitSlashingResponse = _reflection.GeneratedProtocolMessageType('SubmitSlashingResponse', (_message.Message,), {
- 'DESCRIPTOR' : _SUBMITSLASHINGRESPONSE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SubmitSlashingResponse)
- })
-_sym_db.RegisterMessage(SubmitSlashingResponse)
-
-IndividualVotesRequest = _reflection.GeneratedProtocolMessageType('IndividualVotesRequest', (_message.Message,), {
- 'DESCRIPTOR' : _INDIVIDUALVOTESREQUEST,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.IndividualVotesRequest)
- })
-_sym_db.RegisterMessage(IndividualVotesRequest)
-
-IndividualVotesRespond = _reflection.GeneratedProtocolMessageType('IndividualVotesRespond', (_message.Message,), {
-
- 'IndividualVote' : _reflection.GeneratedProtocolMessageType('IndividualVote', (_message.Message,), {
- 'DESCRIPTOR' : _INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.IndividualVotesRespond.IndividualVote)
- })
- ,
- 'DESCRIPTOR' : _INDIVIDUALVOTESRESPOND,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.IndividualVotesRespond)
- })
-_sym_db.RegisterMessage(IndividualVotesRespond)
-_sym_db.RegisterMessage(IndividualVotesRespond.IndividualVote)
-
-WeakSubjectivityCheckpoint = _reflection.GeneratedProtocolMessageType('WeakSubjectivityCheckpoint', (_message.Message,), {
- 'DESCRIPTOR' : _WEAKSUBJECTIVITYCHECKPOINT,
- '__module__' : 'eth.v1alpha1.beacon_chain_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.WeakSubjectivityCheckpoint)
- })
-_sym_db.RegisterMessage(WeakSubjectivityCheckpoint)
-
-
-DESCRIPTOR._options = None
-_LISTINDEXEDATTESTATIONSREQUEST.fields_by_name['epoch']._options = None
-_LISTATTESTATIONSREQUEST.fields_by_name['epoch']._options = None
-_LISTBLOCKSREQUEST.fields_by_name['slot']._options = None
-_LISTBLOCKSREQUEST.fields_by_name['epoch']._options = None
-_CHAINHEAD.fields_by_name['head_slot']._options = None
-_CHAINHEAD.fields_by_name['head_epoch']._options = None
-_CHAINHEAD.fields_by_name['head_block_root']._options = None
-_CHAINHEAD.fields_by_name['finalized_slot']._options = None
-_CHAINHEAD.fields_by_name['finalized_epoch']._options = None
-_CHAINHEAD.fields_by_name['finalized_block_root']._options = None
-_CHAINHEAD.fields_by_name['justified_slot']._options = None
-_CHAINHEAD.fields_by_name['justified_epoch']._options = None
-_CHAINHEAD.fields_by_name['justified_block_root']._options = None
-_CHAINHEAD.fields_by_name['previous_justified_slot']._options = None
-_CHAINHEAD.fields_by_name['previous_justified_epoch']._options = None
-_CHAINHEAD.fields_by_name['previous_justified_block_root']._options = None
-_LISTCOMMITTEESREQUEST.fields_by_name['epoch']._options = None
-_BEACONCOMMITTEES_COMMITTEEITEM.fields_by_name['validator_indices']._options = None
-_BEACONCOMMITTEES_COMMITTEESENTRY._options = None
-_BEACONCOMMITTEES.fields_by_name['epoch']._options = None
-_LISTVALIDATORBALANCESREQUEST.fields_by_name['epoch']._options = None
-_LISTVALIDATORBALANCESREQUEST.fields_by_name['public_keys']._options = None
-_LISTVALIDATORBALANCESREQUEST.fields_by_name['indices']._options = None
-_VALIDATORBALANCES_BALANCE.fields_by_name['public_key']._options = None
-_VALIDATORBALANCES_BALANCE.fields_by_name['index']._options = None
-_VALIDATORBALANCES.fields_by_name['epoch']._options = None
-_LISTVALIDATORSREQUEST.fields_by_name['epoch']._options = None
-_LISTVALIDATORSREQUEST.fields_by_name['indices']._options = None
-_GETVALIDATORREQUEST.fields_by_name['index']._options = None
-_GETVALIDATORREQUEST.fields_by_name['public_key']._options = None
-_VALIDATORS_VALIDATORCONTAINER.fields_by_name['index']._options = None
-_VALIDATORS.fields_by_name['epoch']._options = None
-_GETVALIDATORACTIVESETCHANGESREQUEST.fields_by_name['epoch']._options = None
-_ACTIVESETCHANGES.fields_by_name['epoch']._options = None
-_ACTIVESETCHANGES.fields_by_name['activated_public_keys']._options = None
-_ACTIVESETCHANGES.fields_by_name['activated_indices']._options = None
-_ACTIVESETCHANGES.fields_by_name['exited_public_keys']._options = None
-_ACTIVESETCHANGES.fields_by_name['exited_indices']._options = None
-_ACTIVESETCHANGES.fields_by_name['slashed_public_keys']._options = None
-_ACTIVESETCHANGES.fields_by_name['slashed_indices']._options = None
-_ACTIVESETCHANGES.fields_by_name['ejected_public_keys']._options = None
-_ACTIVESETCHANGES.fields_by_name['ejected_indices']._options = None
-_VALIDATORPERFORMANCEREQUEST.fields_by_name['public_keys']._options = None
-_VALIDATORPERFORMANCEREQUEST.fields_by_name['indices']._options = None
-_VALIDATORPERFORMANCERESPONSE.fields_by_name['inclusion_slots']._options = None
-_VALIDATORPERFORMANCERESPONSE.fields_by_name['inclusion_distances']._options = None
-_VALIDATORPERFORMANCERESPONSE.fields_by_name['public_keys']._options = None
-_VALIDATORQUEUE.fields_by_name['activation_public_keys']._options = None
-_VALIDATORQUEUE.fields_by_name['exit_public_keys']._options = None
-_VALIDATORQUEUE.fields_by_name['activation_validator_indices']._options = None
-_VALIDATORQUEUE.fields_by_name['exit_validator_indices']._options = None
-_LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['epoch']._options = None
-_LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['public_keys']._options = None
-_LISTVALIDATORASSIGNMENTSREQUEST.fields_by_name['indices']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['beacon_committees']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['committee_index']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['attester_slot']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['proposer_slots']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['public_key']._options = None
-_VALIDATORASSIGNMENTS_COMMITTEEASSIGNMENT.fields_by_name['validator_index']._options = None
-_VALIDATORASSIGNMENTS.fields_by_name['epoch']._options = None
-_GETVALIDATORPARTICIPATIONREQUEST.fields_by_name['epoch']._options = None
-_VALIDATORPARTICIPATIONRESPONSE.fields_by_name['epoch']._options = None
-_BEACONCONFIG_CONFIGENTRY._options = None
-_SUBMITSLASHINGRESPONSE.fields_by_name['slashed_indices']._options = None
-_INDIVIDUALVOTESREQUEST.fields_by_name['epoch']._options = None
-_INDIVIDUALVOTESREQUEST.fields_by_name['indices']._options = None
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE.fields_by_name['epoch']._options = None
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE.fields_by_name['validator_index']._options = None
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE.fields_by_name['inclusion_slot']._options = None
-_INDIVIDUALVOTESRESPOND_INDIVIDUALVOTE.fields_by_name['inclusion_distance']._options = None
-_WEAKSUBJECTIVITYCHECKPOINT.fields_by_name['epoch']._options = None
-
-_BEACONCHAIN = _descriptor.ServiceDescriptor(
- name='BeaconChain',
- full_name='ethereum.eth.v1alpha1.BeaconChain',
- file=DESCRIPTOR,
- index=0,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=8790,
- serialized_end=12521,
- methods=[
- _descriptor.MethodDescriptor(
- name='ListAttestations',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListAttestations',
- index=0,
- containing_service=None,
- input_type=_LISTATTESTATIONSREQUEST,
- output_type=_LISTATTESTATIONSRESPONSE,
- serialized_options=b'\202\323\344\223\002#\022!/eth/v1alpha1/beacon/attestations',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListIndexedAttestations',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListIndexedAttestations',
- index=1,
- containing_service=None,
- input_type=_LISTINDEXEDATTESTATIONSREQUEST,
- output_type=_LISTINDEXEDATTESTATIONSRESPONSE,
- serialized_options=b'\202\323\344\223\002+\022)/eth/v1alpha1/beacon/attestations/indexed',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamAttestations',
- full_name='ethereum.eth.v1alpha1.BeaconChain.StreamAttestations',
- index=2,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATION,
- serialized_options=b'\202\323\344\223\002*\022(/eth/v1alpha1/beacon/attestations/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamIndexedAttestations',
- full_name='ethereum.eth.v1alpha1.BeaconChain.StreamIndexedAttestations',
- index=3,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=eth_dot_v1alpha1_dot_beacon__block__pb2._INDEXEDATTESTATION,
- serialized_options=b'\202\323\344\223\0022\0220/eth/v1alpha1/beacon/attestations/indexed/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='AttestationPool',
- full_name='ethereum.eth.v1alpha1.BeaconChain.AttestationPool',
- index=4,
- containing_service=None,
- input_type=_ATTESTATIONPOOLREQUEST,
- output_type=_ATTESTATIONPOOLRESPONSE,
- serialized_options=b'\202\323\344\223\002(\022&/eth/v1alpha1/beacon/attestations/pool',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListBlocks',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListBlocks',
- index=5,
- containing_service=None,
- input_type=_LISTBLOCKSREQUEST,
- output_type=_LISTBLOCKSRESPONSE,
- serialized_options=b'\202\323\344\223\002\035\022\033/eth/v1alpha1/beacon/blocks',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamBlocks',
- full_name='ethereum.eth.v1alpha1.BeaconChain.StreamBlocks',
- index=6,
- containing_service=None,
- input_type=_STREAMBLOCKSREQUEST,
- output_type=eth_dot_v1alpha1_dot_beacon__block__pb2._SIGNEDBEACONBLOCK,
- serialized_options=b'\202\323\344\223\002$\022\"/eth/v1alpha1/beacon/blocks/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamChainHead',
- full_name='ethereum.eth.v1alpha1.BeaconChain.StreamChainHead',
- index=7,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_CHAINHEAD,
- serialized_options=b'\202\323\344\223\002\'\022%/eth/v1alpha1/beacon/chainhead/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetChainHead',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetChainHead',
- index=8,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_CHAINHEAD,
- serialized_options=b'\202\323\344\223\002 \022\036/eth/v1alpha1/beacon/chainhead',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetWeakSubjectivityCheckpoint',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetWeakSubjectivityCheckpoint',
- index=9,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_WEAKSUBJECTIVITYCHECKPOINT,
- serialized_options=b'\202\323\344\223\0023\0221/eth/v1alpha1/beacon/weak_subjectivity_checkpoint',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListBeaconCommittees',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListBeaconCommittees',
- index=10,
- containing_service=None,
- input_type=_LISTCOMMITTEESREQUEST,
- output_type=_BEACONCOMMITTEES,
- serialized_options=b'\202\323\344\223\002!\022\037/eth/v1alpha1/beacon/committees',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListValidatorBalances',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListValidatorBalances',
- index=11,
- containing_service=None,
- input_type=_LISTVALIDATORBALANCESREQUEST,
- output_type=_VALIDATORBALANCES,
- serialized_options=b'\202\323\344\223\002#\022!/eth/v1alpha1/validators/balances',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListValidators',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListValidators',
- index=12,
- containing_service=None,
- input_type=_LISTVALIDATORSREQUEST,
- output_type=_VALIDATORS,
- serialized_options=b'\202\323\344\223\002\032\022\030/eth/v1alpha1/validators',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetValidator',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetValidator',
- index=13,
- containing_service=None,
- input_type=_GETVALIDATORREQUEST,
- output_type=eth_dot_v1alpha1_dot_validator__pb2._VALIDATOR,
- serialized_options=b'\202\323\344\223\002\031\022\027/eth/v1alpha1/validator',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetValidatorActiveSetChanges',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetValidatorActiveSetChanges',
- index=14,
- containing_service=None,
- input_type=_GETVALIDATORACTIVESETCHANGESREQUEST,
- output_type=_ACTIVESETCHANGES,
- serialized_options=b'\202\323\344\223\002+\022)/eth/v1alpha1/validators/activesetchanges',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetValidatorQueue',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetValidatorQueue',
- index=15,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_VALIDATORQUEUE,
- serialized_options=b'\202\323\344\223\002 \022\036/eth/v1alpha1/validators/queue',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetValidatorPerformance',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetValidatorPerformance',
- index=16,
- containing_service=None,
- input_type=_VALIDATORPERFORMANCEREQUEST,
- output_type=_VALIDATORPERFORMANCERESPONSE,
- serialized_options=b'\202\323\344\223\002&\022$/eth/v1alpha1/validators/performance',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListValidatorAssignments',
- full_name='ethereum.eth.v1alpha1.BeaconChain.ListValidatorAssignments',
- index=17,
- containing_service=None,
- input_type=_LISTVALIDATORASSIGNMENTSREQUEST,
- output_type=_VALIDATORASSIGNMENTS,
- serialized_options=b'\202\323\344\223\002&\022$/eth/v1alpha1/validators/assignments',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetValidatorParticipation',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetValidatorParticipation',
- index=18,
- containing_service=None,
- input_type=_GETVALIDATORPARTICIPATIONREQUEST,
- output_type=_VALIDATORPARTICIPATIONRESPONSE,
- serialized_options=b'\202\323\344\223\002(\022&/eth/v1alpha1/validators/participation',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetBeaconConfig',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetBeaconConfig',
- index=19,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_BEACONCONFIG,
- serialized_options=b'\202\323\344\223\002\035\022\033/eth/v1alpha1/beacon/config',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamValidatorsInfo',
- full_name='ethereum.eth.v1alpha1.BeaconChain.StreamValidatorsInfo',
- index=20,
- containing_service=None,
- input_type=_VALIDATORCHANGESET,
- output_type=eth_dot_v1alpha1_dot_validator__pb2._VALIDATORINFO,
- serialized_options=b'\202\323\344\223\002-\022+/eth/v1alpha1/beacon/validators/info/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SubmitAttesterSlashing',
- full_name='ethereum.eth.v1alpha1.BeaconChain.SubmitAttesterSlashing',
- index=21,
- containing_service=None,
- input_type=eth_dot_v1alpha1_dot_beacon__block__pb2._ATTESTERSLASHING,
- output_type=_SUBMITSLASHINGRESPONSE,
- serialized_options=b'\202\323\344\223\0020\022./eth/v1alpha1/beacon/slashings/attester/submit',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SubmitProposerSlashing',
- full_name='ethereum.eth.v1alpha1.BeaconChain.SubmitProposerSlashing',
- index=22,
- containing_service=None,
- input_type=eth_dot_v1alpha1_dot_beacon__block__pb2._PROPOSERSLASHING,
- output_type=_SUBMITSLASHINGRESPONSE,
- serialized_options=b'\202\323\344\223\0020\022./eth/v1alpha1/beacon/slashings/proposer/submit',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetIndividualVotes',
- full_name='ethereum.eth.v1alpha1.BeaconChain.GetIndividualVotes',
- index=23,
- containing_service=None,
- input_type=_INDIVIDUALVOTESREQUEST,
- output_type=_INDIVIDUALVOTESRESPOND,
- serialized_options=b'\202\323\344\223\002\'\022%/eth/v1alpha1/beacon/individual_votes',
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_BEACONCHAIN)
-
-DESCRIPTOR.services_by_name['BeaconChain'] = _BEACONCHAIN
-
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/beacon_chain_pb2_grpc.py b/proto/eth/v1alpha1/beacon_chain_pb2_grpc.py
deleted file mode 100644
index bc3d169..0000000
--- a/proto/eth/v1alpha1/beacon_chain_pb2_grpc.py
+++ /dev/null
@@ -1,933 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from eth.v1alpha1 import attestation_pb2 as eth_dot_v1alpha1_dot_attestation__pb2
-from eth.v1alpha1 import beacon_block_pb2 as eth_dot_v1alpha1_dot_beacon__block__pb2
-from eth.v1alpha1 import beacon_chain_pb2 as eth_dot_v1alpha1_dot_beacon__chain__pb2
-from eth.v1alpha1 import validator_pb2 as eth_dot_v1alpha1_dot_validator__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-class BeaconChainStub(object):
- """Beacon chain API
-
- The beacon chain API can be used to access data relevant to the Ethereum 2.0
- phase 0 beacon chain.
- TODO(preston): Batch requests?
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.ListAttestations = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListAttestations',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsResponse.FromString,
- )
- self.ListIndexedAttestations = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListIndexedAttestations',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsResponse.FromString,
- )
- self.StreamAttestations = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconChain/StreamAttestations',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_attestation__pb2.Attestation.FromString,
- )
- self.StreamIndexedAttestations = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconChain/StreamIndexedAttestations',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.IndexedAttestation.FromString,
- )
- self.AttestationPool = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/AttestationPool',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolResponse.FromString,
- )
- self.ListBlocks = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListBlocks',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksResponse.FromString,
- )
- self.StreamBlocks = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconChain/StreamBlocks',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.StreamBlocksRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.FromString,
- )
- self.StreamChainHead = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconChain/StreamChainHead',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.FromString,
- )
- self.GetChainHead = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetChainHead',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.FromString,
- )
- self.GetWeakSubjectivityCheckpoint = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetWeakSubjectivityCheckpoint',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.WeakSubjectivityCheckpoint.FromString,
- )
- self.ListBeaconCommittees = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListBeaconCommittees',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListCommitteesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconCommittees.FromString,
- )
- self.ListValidatorBalances = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListValidatorBalances',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorBalancesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorBalances.FromString,
- )
- self.ListValidators = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListValidators',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorsRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.Validators.FromString,
- )
- self.GetValidator = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetValidator',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.Validator.FromString,
- )
- self.GetValidatorActiveSetChanges = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorActiveSetChanges',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorActiveSetChangesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ActiveSetChanges.FromString,
- )
- self.GetValidatorQueue = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorQueue',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorQueue.FromString,
- )
- self.GetValidatorPerformance = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorPerformance',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceResponse.FromString,
- )
- self.ListValidatorAssignments = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/ListValidatorAssignments',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorAssignmentsRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorAssignments.FromString,
- )
- self.GetValidatorParticipation = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorParticipation',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorParticipationRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorParticipationResponse.FromString,
- )
- self.GetBeaconConfig = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetBeaconConfig',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconConfig.FromString,
- )
- self.StreamValidatorsInfo = channel.stream_stream(
- '/ethereum.eth.v1alpha1.BeaconChain/StreamValidatorsInfo',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorChangeSet.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorInfo.FromString,
- )
- self.SubmitAttesterSlashing = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/SubmitAttesterSlashing',
- request_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.AttesterSlashing.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.FromString,
- )
- self.SubmitProposerSlashing = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/SubmitProposerSlashing',
- request_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.ProposerSlashing.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.FromString,
- )
- self.GetIndividualVotes = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconChain/GetIndividualVotes',
- request_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRespond.FromString,
- )
-
-
-class BeaconChainServicer(object):
- """Beacon chain API
-
- The beacon chain API can be used to access data relevant to the Ethereum 2.0
- phase 0 beacon chain.
- TODO(preston): Batch requests?
- """
-
- def ListAttestations(self, request, context):
- """Retrieve attestations by block root, slot, or epoch.
-
- The server may return an empty list when no attestations match the given
- filter criteria. This RPC should not return NOT_FOUND. Only one filter
- criteria should be used. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListIndexedAttestations(self, request, context):
- """Retrieve indexed attestations by block root, slot, or epoch.
-
- The server may return an empty list when no indexed attestations match the given
- filter criteria. This RPC should not return NOT_FOUND. Only one filter
- criteria should be used. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamAttestations(self, request, context):
- """Server-side stream of attestations as they are received by
- the beacon chain node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamIndexedAttestations(self, request, context):
- """Server-side stream of indexed attestations as they are received by
- the beacon chain node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def AttestationPool(self, request, context):
- """Retrieve attestations from pool.
-
- The server returns a list of attestations that have been seen but not
- yet processed. Pool attestations eventually expire as the slot
- advances, so an attestation missing from this request does not imply
- that it was included in a block. The attestation may have expired.
- Refer to the ethereum 2.0 specification for more details on how
- attestations are processed and when they are no longer valid.
- https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/0_beacon-chain.md#attestations
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListBlocks(self, request, context):
- """Retrieve blocks by root, slot, or epoch.
-
- The server may return multiple blocks in the case that a slot or epoch is
- provided as the filter criteria. The server may return an empty list when
- no blocks in their database match the filter criteria. This RPC should
- not return NOT_FOUND. Only one filter criteria should be used. This endpoint
- allows for retrieval of genesis information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamBlocks(self, request, context):
- """Server-side stream of all signed blocks as they are received by
- the beacon chain node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamChainHead(self, request, context):
- """Server-side stream of information about the head of the beacon chain
- from the view of the beacon chain node.
-
- This includes the head block slot and root as well as information about
- the most recent finalized and justified slots.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetChainHead(self, request, context):
- """Retrieve information about the head of the beacon chain from the view of
- the beacon chain node.
-
- This includes the head block slot and root as well as information about
- the most recent finalized and justified slots.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetWeakSubjectivityCheckpoint(self, request, context):
- """Retrieve information about the weak subjectivity of the beacon chain from the view of
- the beacon chain node.
-
- This includes the weak subjectivity block root, state root and epoch number.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListBeaconCommittees(self, request, context):
- """Retrieve the beacon chain committees for a given epoch.
-
- If no filter criteria is specified, the response returns
- all beacon committees for the current epoch. The results are paginated by default.
- This endpoint allows for retrieval of genesis information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListValidatorBalances(self, request, context):
- """Retrieve validator balances for a given set of public keys at a specific
- epoch in time. This endpoint allows for retrieval of genesis information
- via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListValidators(self, request, context):
- """Retrieve the current validator registry.
-
- The request may include an optional historical epoch to retrieve a
- specific validator set in time. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetValidator(self, request, context):
- """Retrieve information about a specific validator in the registry.
-
- This request may query by validator index or public key.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetValidatorActiveSetChanges(self, request, context):
- """Retrieve the active set changes for a given epoch.
-
- This data includes any activations, voluntary exits, and involuntary
- ejections. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetValidatorQueue(self, request, context):
- """Retrieve the current validator queue information.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetValidatorPerformance(self, request, context):
- """GetValidatorPerformance reports a validator's latest balance along with other important
- metrics on rewards and penalties throughout its lifecycle in the beacon chain.
- The request takes in a list of validator public keys and returns a performance report
- for all of them respectively.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListValidatorAssignments(self, request, context):
- """Retrieve the validator assignments for a given epoch.
-
- This request may specify optional validator indices or public keys to
- filter validator assignments. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetValidatorParticipation(self, request, context):
- """Retrieve the validator participation information for a given epoch.
-
- This method returns information about the global participation of
- validator attestations. This endpoint allows for retrieval of genesis
- information via a boolean query filter.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetBeaconConfig(self, request, context):
- """Retrieve the current configuration parameters of the beacon chain.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamValidatorsInfo(self, request_iterator, context):
- """Server-side stream of validator information at each epoch.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SubmitAttesterSlashing(self, request, context):
- """Submit an attester slashing object to the beacon node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SubmitProposerSlashing(self, request, context):
- """Submit a proposer slashing object to the beacon node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetIndividualVotes(self, request, context):
- """Returns a list of validators individual vote status of a given epoch.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_BeaconChainServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'ListAttestations': grpc.unary_unary_rpc_method_handler(
- servicer.ListAttestations,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsResponse.SerializeToString,
- ),
- 'ListIndexedAttestations': grpc.unary_unary_rpc_method_handler(
- servicer.ListIndexedAttestations,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsResponse.SerializeToString,
- ),
- 'StreamAttestations': grpc.unary_stream_rpc_method_handler(
- servicer.StreamAttestations,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_attestation__pb2.Attestation.SerializeToString,
- ),
- 'StreamIndexedAttestations': grpc.unary_stream_rpc_method_handler(
- servicer.StreamIndexedAttestations,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.IndexedAttestation.SerializeToString,
- ),
- 'AttestationPool': grpc.unary_unary_rpc_method_handler(
- servicer.AttestationPool,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolResponse.SerializeToString,
- ),
- 'ListBlocks': grpc.unary_unary_rpc_method_handler(
- servicer.ListBlocks,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksResponse.SerializeToString,
- ),
- 'StreamBlocks': grpc.unary_stream_rpc_method_handler(
- servicer.StreamBlocks,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.StreamBlocksRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.SerializeToString,
- ),
- 'StreamChainHead': grpc.unary_stream_rpc_method_handler(
- servicer.StreamChainHead,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.SerializeToString,
- ),
- 'GetChainHead': grpc.unary_unary_rpc_method_handler(
- servicer.GetChainHead,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.SerializeToString,
- ),
- 'GetWeakSubjectivityCheckpoint': grpc.unary_unary_rpc_method_handler(
- servicer.GetWeakSubjectivityCheckpoint,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.WeakSubjectivityCheckpoint.SerializeToString,
- ),
- 'ListBeaconCommittees': grpc.unary_unary_rpc_method_handler(
- servicer.ListBeaconCommittees,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListCommitteesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconCommittees.SerializeToString,
- ),
- 'ListValidatorBalances': grpc.unary_unary_rpc_method_handler(
- servicer.ListValidatorBalances,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorBalancesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorBalances.SerializeToString,
- ),
- 'ListValidators': grpc.unary_unary_rpc_method_handler(
- servicer.ListValidators,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorsRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.Validators.SerializeToString,
- ),
- 'GetValidator': grpc.unary_unary_rpc_method_handler(
- servicer.GetValidator,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.Validator.SerializeToString,
- ),
- 'GetValidatorActiveSetChanges': grpc.unary_unary_rpc_method_handler(
- servicer.GetValidatorActiveSetChanges,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorActiveSetChangesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ActiveSetChanges.SerializeToString,
- ),
- 'GetValidatorQueue': grpc.unary_unary_rpc_method_handler(
- servicer.GetValidatorQueue,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorQueue.SerializeToString,
- ),
- 'GetValidatorPerformance': grpc.unary_unary_rpc_method_handler(
- servicer.GetValidatorPerformance,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceResponse.SerializeToString,
- ),
- 'ListValidatorAssignments': grpc.unary_unary_rpc_method_handler(
- servicer.ListValidatorAssignments,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorAssignmentsRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorAssignments.SerializeToString,
- ),
- 'GetValidatorParticipation': grpc.unary_unary_rpc_method_handler(
- servicer.GetValidatorParticipation,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorParticipationRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorParticipationResponse.SerializeToString,
- ),
- 'GetBeaconConfig': grpc.unary_unary_rpc_method_handler(
- servicer.GetBeaconConfig,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconConfig.SerializeToString,
- ),
- 'StreamValidatorsInfo': grpc.stream_stream_rpc_method_handler(
- servicer.StreamValidatorsInfo,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorChangeSet.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorInfo.SerializeToString,
- ),
- 'SubmitAttesterSlashing': grpc.unary_unary_rpc_method_handler(
- servicer.SubmitAttesterSlashing,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.AttesterSlashing.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.SerializeToString,
- ),
- 'SubmitProposerSlashing': grpc.unary_unary_rpc_method_handler(
- servicer.SubmitProposerSlashing,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.ProposerSlashing.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.SerializeToString,
- ),
- 'GetIndividualVotes': grpc.unary_unary_rpc_method_handler(
- servicer.GetIndividualVotes,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRespond.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'ethereum.eth.v1alpha1.BeaconChain', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class BeaconChain(object):
- """Beacon chain API
-
- The beacon chain API can be used to access data relevant to the Ethereum 2.0
- phase 0 beacon chain.
- TODO(preston): Batch requests?
- """
-
- @staticmethod
- def ListAttestations(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListAttestations',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListAttestationsResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListIndexedAttestations(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListIndexedAttestations',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListIndexedAttestationsResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamAttestations(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconChain/StreamAttestations',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_attestation__pb2.Attestation.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamIndexedAttestations(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconChain/StreamIndexedAttestations',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__block__pb2.IndexedAttestation.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def AttestationPool(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/AttestationPool',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.AttestationPoolResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListBlocks(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListBlocks',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListBlocksResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamBlocks(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconChain/StreamBlocks',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.StreamBlocksRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamChainHead(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconChain/StreamChainHead',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetChainHead(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetChainHead',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ChainHead.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetWeakSubjectivityCheckpoint(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetWeakSubjectivityCheckpoint',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.WeakSubjectivityCheckpoint.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListBeaconCommittees(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListBeaconCommittees',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListCommitteesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconCommittees.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListValidatorBalances(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListValidatorBalances',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorBalancesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorBalances.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListValidators(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListValidators',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorsRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.Validators.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetValidator(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetValidator',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.Validator.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetValidatorActiveSetChanges(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorActiveSetChanges',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorActiveSetChangesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ActiveSetChanges.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetValidatorQueue(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorQueue',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorQueue.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetValidatorPerformance(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorPerformance',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorPerformanceResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListValidatorAssignments(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/ListValidatorAssignments',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ListValidatorAssignmentsRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorAssignments.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetValidatorParticipation(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetValidatorParticipation',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.GetValidatorParticipationRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorParticipationResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetBeaconConfig(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetBeaconConfig',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.BeaconConfig.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamValidatorsInfo(request_iterator,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.stream_stream(request_iterator, target, '/ethereum.eth.v1alpha1.BeaconChain/StreamValidatorsInfo',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.ValidatorChangeSet.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorInfo.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SubmitAttesterSlashing(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/SubmitAttesterSlashing',
- eth_dot_v1alpha1_dot_beacon__block__pb2.AttesterSlashing.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SubmitProposerSlashing(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/SubmitProposerSlashing',
- eth_dot_v1alpha1_dot_beacon__block__pb2.ProposerSlashing.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.SubmitSlashingResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetIndividualVotes(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconChain/GetIndividualVotes',
- eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__chain__pb2.IndividualVotesRespond.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/proto/eth/v1alpha1/node.proto b/proto/eth/v1alpha1/node.proto
deleted file mode 100644
index e8a3f75..0000000
--- a/proto/eth/v1alpha1/node.proto
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/v1alpha1/node.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-package ethereum.eth.v1alpha1;
-
-import "google/api/annotations.proto";
-import "google/protobuf/empty.proto";
-import "google/protobuf/timestamp.proto";
-
-import "eth/ext/options.proto";
-
-option csharp_namespace = "Ethereum.Eth.v1alpha1";
-option go_package = "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth";
-option java_multiple_files = true;
-option java_outer_classname = "NodeProto";
-option java_package = "org.ethereum.eth.v1alpha1";
-option php_namespace = "Ethereum\\Eth\\v1alpha1";
-
-// Node service API
-//
-// Node service provides general information about the node itself, the services
-// it supports, chain information and node version.
-service Node {
- // Retrieve the current network sync status of the node.
- rpc GetSyncStatus(google.protobuf.Empty) returns (SyncStatus) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/syncing"
- };
- }
-
- // Retrieve information about the genesis of Ethereum 2.0.
- rpc GetGenesis(google.protobuf.Empty) returns (Genesis) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/genesis"
- };
- }
-
- // Retrieve information about the running Ethereum 2.0 node.
- rpc GetVersion(google.protobuf.Empty) returns (Version) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/version"
- };
- }
-
- // Retrieve the list of services implemented and enabled by this node.
- //
- // Any service not present in this list may return UNIMPLEMENTED or
- // PERMISSION_DENIED. The server may also support fetching services by grpc
- // reflection.
- rpc ListImplementedServices(google.protobuf.Empty) returns (ImplementedServices) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/services"
- };
- }
-
- // Retrieves the peer data of the local peer.
- rpc GetHost(google.protobuf.Empty) returns (HostData) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/p2p"
- };
- }
-
- // Retrieve the peer corresponding to the provided peer id.
- rpc GetPeer(PeerRequest) returns (Peer) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/peer"
- };
- }
-
- // Retrieve the list of peers currently connected to this node.
- rpc ListPeers(google.protobuf.Empty) returns (Peers) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/node/peers"
- };
- }
-}
-
-// Information about the current network sync status of the node.
-message SyncStatus {
- // Whether or not the node is currently syncing.
- bool syncing = 1;
-}
-
-// Information about the genesis of Ethereum 2.0.
-message Genesis {
- // UTC time specified in the chain start event in the deposit contract.
- google.protobuf.Timestamp genesis_time = 1;
-
- // Address of the deposit contract in the Ethereum 1 chain.
- bytes deposit_contract_address = 2;
-
- // Root of the genesis validators deposits; used for domain separation
- // when signing data structures for this chain.
- bytes genesis_validators_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-// Information about the node version.
-message Version {
- // A string that uniquely identifies the node and its version.
- string version = 1;
-
- // Additional metadata that the node would like to provide. This field may
- // be used to list any meaningful data to the client.
- string metadata = 2;
-}
-
-message ImplementedServices {
- repeated string services = 1;
-}
-
-message PeerRequest {
- // Peer id of the peer requested.
- string peer_id = 1;
-}
-
-// Peers is a list of peer messages.
-message Peers {
- repeated Peer peers = 1;
-}
-
-// Peer provides details of a peer on the network.
-message Peer {
- // The address of the peer, as a full multiaddr, for example:
- // /ip4/37.221.192.134/tcp/13000/p2p/16Uiu2HAm8maLMjag1TAUM52zPfmLbVMGFdwUAWgoHu1HDQLR6e17
- string address = 1;
- // The direction of the connection (inbound/outbound).
- PeerDirection direction = 2;
- // The connection state of the peer at the moment of the request. (e.g. Connecting)
- ConnectionState connection_state = 3;
- // The peer id of the peer.
- string peer_id = 4;
- // The latest ENR of the peer that's in the record.
- string enr = 5;
-}
-
-// P2P Data on the local host.
-message HostData{
- // All the multiaddress of the peer, specified as a full multiaddr, for example:
- // /ip4/37.221.192.134/tcp/13000/p2p/16Uiu2HAm8maLMjag1TAUM52zPfmLbVMGFdwUAWgoHu1HDQLR6e17
- repeated string addresses = 1;
- // The peer id of the peer.
- string peer_id = 2;
- // The latest ENR of the local peer.
- string enr = 3;
-}
-
-// PeerDirection states the direction of the connection to a peer.
-enum PeerDirection {
- UNKNOWN = 0;
- INBOUND = 1;
- OUTBOUND = 2;
-}
-
-// ConnectionState states the current status of the peer.
-enum ConnectionState {
- DISCONNECTED = 0;
- DISCONNECTING = 1;
- CONNECTED = 2;
- CONNECTING = 3;
-}
\ No newline at end of file
diff --git a/proto/eth/v1alpha1/node_pb2.py b/proto/eth/v1alpha1/node_pb2.py
deleted file mode 100644
index 080b1e2..0000000
--- a/proto/eth/v1alpha1/node_pb2.py
+++ /dev/null
@@ -1,587 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/v1alpha1/node.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
-from eth.ext import options_pb2 as eth_dot_ext_dot_options__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/v1alpha1/node.proto',
- package='ethereum.eth.v1alpha1',
- syntax='proto3',
- serialized_options=b'\n\031org.ethereum.eth.v1alpha1B\tNodeProtoP\001Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\252\002\025Ethereum.Eth.v1alpha1\312\002\025Ethereum\\Eth\\v1alpha1',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x17\x65th/v1alpha1/node.proto\x12\x15\x65thereum.eth.v1alpha1\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x15\x65th/ext/options.proto\"\x1d\n\nSyncStatus\x12\x0f\n\x07syncing\x18\x01 \x01(\x08\"\x86\x01\n\x07Genesis\x12\x30\n\x0cgenesis_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12 \n\x18\x64\x65posit_contract_address\x18\x02 \x01(\x0c\x12\'\n\x17genesis_validators_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\",\n\x07Version\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x10\n\x08metadata\x18\x02 \x01(\t\"\'\n\x13ImplementedServices\x12\x10\n\x08services\x18\x01 \x03(\t\"\x1e\n\x0bPeerRequest\x12\x0f\n\x07peer_id\x18\x01 \x01(\t\"3\n\x05Peers\x12*\n\x05peers\x18\x01 \x03(\x0b\x32\x1b.ethereum.eth.v1alpha1.Peer\"\xb0\x01\n\x04Peer\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x37\n\tdirection\x18\x02 \x01(\x0e\x32$.ethereum.eth.v1alpha1.PeerDirection\x12@\n\x10\x63onnection_state\x18\x03 \x01(\x0e\x32&.ethereum.eth.v1alpha1.ConnectionState\x12\x0f\n\x07peer_id\x18\x04 \x01(\t\x12\x0b\n\x03\x65nr\x18\x05 \x01(\t\";\n\x08HostData\x12\x11\n\taddresses\x18\x01 \x03(\t\x12\x0f\n\x07peer_id\x18\x02 \x01(\t\x12\x0b\n\x03\x65nr\x18\x03 \x01(\t*7\n\rPeerDirection\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07INBOUND\x10\x01\x12\x0c\n\x08OUTBOUND\x10\x02*U\n\x0f\x43onnectionState\x12\x10\n\x0c\x44ISCONNECTED\x10\x00\x12\x11\n\rDISCONNECTING\x10\x01\x12\r\n\tCONNECTED\x10\x02\x12\x0e\n\nCONNECTING\x10\x03\x32\x85\x06\n\x04Node\x12n\n\rGetSyncStatus\x12\x16.google.protobuf.Empty\x1a!.ethereum.eth.v1alpha1.SyncStatus\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/eth/v1alpha1/node/syncing\x12h\n\nGetGenesis\x12\x16.google.protobuf.Empty\x1a\x1e.ethereum.eth.v1alpha1.Genesis\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/eth/v1alpha1/node/genesis\x12h\n\nGetVersion\x12\x16.google.protobuf.Empty\x1a\x1e.ethereum.eth.v1alpha1.Version\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/eth/v1alpha1/node/version\x12\x82\x01\n\x17ListImplementedServices\x12\x16.google.protobuf.Empty\x1a*.ethereum.eth.v1alpha1.ImplementedServices\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/eth/v1alpha1/node/services\x12\x62\n\x07GetHost\x12\x16.google.protobuf.Empty\x1a\x1f.ethereum.eth.v1alpha1.HostData\"\x1e\x82\xd3\xe4\x93\x02\x18\x12\x16/eth/v1alpha1/node/p2p\x12k\n\x07GetPeer\x12\".ethereum.eth.v1alpha1.PeerRequest\x1a\x1b.ethereum.eth.v1alpha1.Peer\"\x1f\x82\xd3\xe4\x93\x02\x19\x12\x17/eth/v1alpha1/node/peer\x12\x63\n\tListPeers\x12\x16.google.protobuf.Empty\x1a\x1c.ethereum.eth.v1alpha1.Peers\" \x82\xd3\xe4\x93\x02\x1a\x12\x18/eth/v1alpha1/node/peersB\x90\x01\n\x19org.ethereum.eth.v1alpha1B\tNodeProtoP\x01Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\xaa\x02\x15\x45thereum.Eth.v1alpha1\xca\x02\x15\x45thereum\\Eth\\v1alpha1b\x06proto3'
- ,
- dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,eth_dot_ext_dot_options__pb2.DESCRIPTOR,])
-
-_PEERDIRECTION = _descriptor.EnumDescriptor(
- name='PeerDirection',
- full_name='ethereum.eth.v1alpha1.PeerDirection',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='UNKNOWN', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='INBOUND', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='OUTBOUND', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=745,
- serialized_end=800,
-)
-_sym_db.RegisterEnumDescriptor(_PEERDIRECTION)
-
-PeerDirection = enum_type_wrapper.EnumTypeWrapper(_PEERDIRECTION)
-_CONNECTIONSTATE = _descriptor.EnumDescriptor(
- name='ConnectionState',
- full_name='ethereum.eth.v1alpha1.ConnectionState',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='DISCONNECTED', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='DISCONNECTING', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='CONNECTED', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='CONNECTING', index=3, number=3,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=802,
- serialized_end=887,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTIONSTATE)
-
-ConnectionState = enum_type_wrapper.EnumTypeWrapper(_CONNECTIONSTATE)
-UNKNOWN = 0
-INBOUND = 1
-OUTBOUND = 2
-DISCONNECTED = 0
-DISCONNECTING = 1
-CONNECTED = 2
-CONNECTING = 3
-
-
-
-_SYNCSTATUS = _descriptor.Descriptor(
- name='SyncStatus',
- full_name='ethereum.eth.v1alpha1.SyncStatus',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='syncing', full_name='ethereum.eth.v1alpha1.SyncStatus.syncing', index=0,
- number=1, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=165,
- serialized_end=194,
-)
-
-
-_GENESIS = _descriptor.Descriptor(
- name='Genesis',
- full_name='ethereum.eth.v1alpha1.Genesis',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='genesis_time', full_name='ethereum.eth.v1alpha1.Genesis.genesis_time', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='deposit_contract_address', full_name='ethereum.eth.v1alpha1.Genesis.deposit_contract_address', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_validators_root', full_name='ethereum.eth.v1alpha1.Genesis.genesis_validators_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=197,
- serialized_end=331,
-)
-
-
-_VERSION = _descriptor.Descriptor(
- name='Version',
- full_name='ethereum.eth.v1alpha1.Version',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='version', full_name='ethereum.eth.v1alpha1.Version.version', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='metadata', full_name='ethereum.eth.v1alpha1.Version.metadata', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=333,
- serialized_end=377,
-)
-
-
-_IMPLEMENTEDSERVICES = _descriptor.Descriptor(
- name='ImplementedServices',
- full_name='ethereum.eth.v1alpha1.ImplementedServices',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='services', full_name='ethereum.eth.v1alpha1.ImplementedServices.services', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=379,
- serialized_end=418,
-)
-
-
-_PEERREQUEST = _descriptor.Descriptor(
- name='PeerRequest',
- full_name='ethereum.eth.v1alpha1.PeerRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='peer_id', full_name='ethereum.eth.v1alpha1.PeerRequest.peer_id', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=420,
- serialized_end=450,
-)
-
-
-_PEERS = _descriptor.Descriptor(
- name='Peers',
- full_name='ethereum.eth.v1alpha1.Peers',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='peers', full_name='ethereum.eth.v1alpha1.Peers.peers', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=452,
- serialized_end=503,
-)
-
-
-_PEER = _descriptor.Descriptor(
- name='Peer',
- full_name='ethereum.eth.v1alpha1.Peer',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='address', full_name='ethereum.eth.v1alpha1.Peer.address', index=0,
- number=1, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='direction', full_name='ethereum.eth.v1alpha1.Peer.direction', index=1,
- number=2, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='connection_state', full_name='ethereum.eth.v1alpha1.Peer.connection_state', index=2,
- number=3, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='peer_id', full_name='ethereum.eth.v1alpha1.Peer.peer_id', index=3,
- number=4, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='enr', full_name='ethereum.eth.v1alpha1.Peer.enr', index=4,
- number=5, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=506,
- serialized_end=682,
-)
-
-
-_HOSTDATA = _descriptor.Descriptor(
- name='HostData',
- full_name='ethereum.eth.v1alpha1.HostData',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='addresses', full_name='ethereum.eth.v1alpha1.HostData.addresses', index=0,
- number=1, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='peer_id', full_name='ethereum.eth.v1alpha1.HostData.peer_id', index=1,
- number=2, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='enr', full_name='ethereum.eth.v1alpha1.HostData.enr', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=684,
- serialized_end=743,
-)
-
-_GENESIS.fields_by_name['genesis_time'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
-_PEERS.fields_by_name['peers'].message_type = _PEER
-_PEER.fields_by_name['direction'].enum_type = _PEERDIRECTION
-_PEER.fields_by_name['connection_state'].enum_type = _CONNECTIONSTATE
-DESCRIPTOR.message_types_by_name['SyncStatus'] = _SYNCSTATUS
-DESCRIPTOR.message_types_by_name['Genesis'] = _GENESIS
-DESCRIPTOR.message_types_by_name['Version'] = _VERSION
-DESCRIPTOR.message_types_by_name['ImplementedServices'] = _IMPLEMENTEDSERVICES
-DESCRIPTOR.message_types_by_name['PeerRequest'] = _PEERREQUEST
-DESCRIPTOR.message_types_by_name['Peers'] = _PEERS
-DESCRIPTOR.message_types_by_name['Peer'] = _PEER
-DESCRIPTOR.message_types_by_name['HostData'] = _HOSTDATA
-DESCRIPTOR.enum_types_by_name['PeerDirection'] = _PEERDIRECTION
-DESCRIPTOR.enum_types_by_name['ConnectionState'] = _CONNECTIONSTATE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-SyncStatus = _reflection.GeneratedProtocolMessageType('SyncStatus', (_message.Message,), {
- 'DESCRIPTOR' : _SYNCSTATUS,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SyncStatus)
- })
-_sym_db.RegisterMessage(SyncStatus)
-
-Genesis = _reflection.GeneratedProtocolMessageType('Genesis', (_message.Message,), {
- 'DESCRIPTOR' : _GENESIS,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Genesis)
- })
-_sym_db.RegisterMessage(Genesis)
-
-Version = _reflection.GeneratedProtocolMessageType('Version', (_message.Message,), {
- 'DESCRIPTOR' : _VERSION,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Version)
- })
-_sym_db.RegisterMessage(Version)
-
-ImplementedServices = _reflection.GeneratedProtocolMessageType('ImplementedServices', (_message.Message,), {
- 'DESCRIPTOR' : _IMPLEMENTEDSERVICES,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ImplementedServices)
- })
-_sym_db.RegisterMessage(ImplementedServices)
-
-PeerRequest = _reflection.GeneratedProtocolMessageType('PeerRequest', (_message.Message,), {
- 'DESCRIPTOR' : _PEERREQUEST,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.PeerRequest)
- })
-_sym_db.RegisterMessage(PeerRequest)
-
-Peers = _reflection.GeneratedProtocolMessageType('Peers', (_message.Message,), {
- 'DESCRIPTOR' : _PEERS,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Peers)
- })
-_sym_db.RegisterMessage(Peers)
-
-Peer = _reflection.GeneratedProtocolMessageType('Peer', (_message.Message,), {
- 'DESCRIPTOR' : _PEER,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Peer)
- })
-_sym_db.RegisterMessage(Peer)
-
-HostData = _reflection.GeneratedProtocolMessageType('HostData', (_message.Message,), {
- 'DESCRIPTOR' : _HOSTDATA,
- '__module__' : 'eth.v1alpha1.node_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.HostData)
- })
-_sym_db.RegisterMessage(HostData)
-
-
-DESCRIPTOR._options = None
-_GENESIS.fields_by_name['genesis_validators_root']._options = None
-
-_NODE = _descriptor.ServiceDescriptor(
- name='Node',
- full_name='ethereum.eth.v1alpha1.Node',
- file=DESCRIPTOR,
- index=0,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=890,
- serialized_end=1663,
- methods=[
- _descriptor.MethodDescriptor(
- name='GetSyncStatus',
- full_name='ethereum.eth.v1alpha1.Node.GetSyncStatus',
- index=0,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_SYNCSTATUS,
- serialized_options=b'\202\323\344\223\002\034\022\032/eth/v1alpha1/node/syncing',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetGenesis',
- full_name='ethereum.eth.v1alpha1.Node.GetGenesis',
- index=1,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_GENESIS,
- serialized_options=b'\202\323\344\223\002\034\022\032/eth/v1alpha1/node/genesis',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetVersion',
- full_name='ethereum.eth.v1alpha1.Node.GetVersion',
- index=2,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_VERSION,
- serialized_options=b'\202\323\344\223\002\034\022\032/eth/v1alpha1/node/version',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListImplementedServices',
- full_name='ethereum.eth.v1alpha1.Node.ListImplementedServices',
- index=3,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_IMPLEMENTEDSERVICES,
- serialized_options=b'\202\323\344\223\002\035\022\033/eth/v1alpha1/node/services',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetHost',
- full_name='ethereum.eth.v1alpha1.Node.GetHost',
- index=4,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_HOSTDATA,
- serialized_options=b'\202\323\344\223\002\030\022\026/eth/v1alpha1/node/p2p',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetPeer',
- full_name='ethereum.eth.v1alpha1.Node.GetPeer',
- index=5,
- containing_service=None,
- input_type=_PEERREQUEST,
- output_type=_PEER,
- serialized_options=b'\202\323\344\223\002\031\022\027/eth/v1alpha1/node/peer',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ListPeers',
- full_name='ethereum.eth.v1alpha1.Node.ListPeers',
- index=6,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_PEERS,
- serialized_options=b'\202\323\344\223\002\032\022\030/eth/v1alpha1/node/peers',
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_NODE)
-
-DESCRIPTOR.services_by_name['Node'] = _NODE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/node_pb2_grpc.py b/proto/eth/v1alpha1/node_pb2_grpc.py
deleted file mode 100644
index 9f44fdc..0000000
--- a/proto/eth/v1alpha1/node_pb2_grpc.py
+++ /dev/null
@@ -1,288 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from eth.v1alpha1 import node_pb2 as eth_dot_v1alpha1_dot_node__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-class NodeStub(object):
- """Node service API
-
- Node service provides general information about the node itself, the services
- it supports, chain information and node version.
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.GetSyncStatus = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/GetSyncStatus',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.SyncStatus.FromString,
- )
- self.GetGenesis = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/GetGenesis',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.Genesis.FromString,
- )
- self.GetVersion = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/GetVersion',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.Version.FromString,
- )
- self.ListImplementedServices = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/ListImplementedServices',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.ImplementedServices.FromString,
- )
- self.GetHost = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/GetHost',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.HostData.FromString,
- )
- self.GetPeer = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/GetPeer',
- request_serializer=eth_dot_v1alpha1_dot_node__pb2.PeerRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.Peer.FromString,
- )
- self.ListPeers = channel.unary_unary(
- '/ethereum.eth.v1alpha1.Node/ListPeers',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_node__pb2.Peers.FromString,
- )
-
-
-class NodeServicer(object):
- """Node service API
-
- Node service provides general information about the node itself, the services
- it supports, chain information and node version.
- """
-
- def GetSyncStatus(self, request, context):
- """Retrieve the current network sync status of the node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetGenesis(self, request, context):
- """Retrieve information about the genesis of Ethereum 2.0.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetVersion(self, request, context):
- """Retrieve information about the running Ethereum 2.0 node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListImplementedServices(self, request, context):
- """Retrieve the list of services implemented and enabled by this node.
-
- Any service not present in this list may return UNIMPLEMENTED or
- PERMISSION_DENIED. The server may also support fetching services by grpc
- reflection.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetHost(self, request, context):
- """Retrieves the peer data of the local peer.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetPeer(self, request, context):
- """Retrieve the peer corresponding to the provided peer id.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ListPeers(self, request, context):
- """Retrieve the list of peers currently connected to this node.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_NodeServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'GetSyncStatus': grpc.unary_unary_rpc_method_handler(
- servicer.GetSyncStatus,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.SyncStatus.SerializeToString,
- ),
- 'GetGenesis': grpc.unary_unary_rpc_method_handler(
- servicer.GetGenesis,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.Genesis.SerializeToString,
- ),
- 'GetVersion': grpc.unary_unary_rpc_method_handler(
- servicer.GetVersion,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.Version.SerializeToString,
- ),
- 'ListImplementedServices': grpc.unary_unary_rpc_method_handler(
- servicer.ListImplementedServices,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.ImplementedServices.SerializeToString,
- ),
- 'GetHost': grpc.unary_unary_rpc_method_handler(
- servicer.GetHost,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.HostData.SerializeToString,
- ),
- 'GetPeer': grpc.unary_unary_rpc_method_handler(
- servicer.GetPeer,
- request_deserializer=eth_dot_v1alpha1_dot_node__pb2.PeerRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.Peer.SerializeToString,
- ),
- 'ListPeers': grpc.unary_unary_rpc_method_handler(
- servicer.ListPeers,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_node__pb2.Peers.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'ethereum.eth.v1alpha1.Node', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class Node(object):
- """Node service API
-
- Node service provides general information about the node itself, the services
- it supports, chain information and node version.
- """
-
- @staticmethod
- def GetSyncStatus(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/GetSyncStatus',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.SyncStatus.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetGenesis(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/GetGenesis',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.Genesis.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetVersion(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/GetVersion',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.Version.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListImplementedServices(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/ListImplementedServices',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.ImplementedServices.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetHost(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/GetHost',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.HostData.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetPeer(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/GetPeer',
- eth_dot_v1alpha1_dot_node__pb2.PeerRequest.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.Peer.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ListPeers(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.Node/ListPeers',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_node__pb2.Peers.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/proto/eth/v1alpha1/validator.proto b/proto/eth/v1alpha1/validator.proto
deleted file mode 100644
index f7b85b8..0000000
--- a/proto/eth/v1alpha1/validator.proto
+++ /dev/null
@@ -1,556 +0,0 @@
-// Copyright 2020 Prysmatic Labs.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// https://github.com/prysmaticlabs/ethereumapis/blob/master/eth/v1alpha1/validator.proto
-// Commit: 89fcd65
-
-syntax = "proto3";
-
-package ethereum.eth.v1alpha1;
-
-import "google/api/annotations.proto";
-import "google/protobuf/empty.proto";
-
-import "eth/ext/options.proto";
-import "eth/v1alpha1/beacon_block.proto";
-import "eth/v1alpha1/attestation.proto";
-
-option csharp_namespace = "Ethereum.Eth.v1alpha1";
-option go_package = "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth";
-option java_multiple_files = true;
-option java_outer_classname = "ValidatorProto";
-option java_package = "org.ethereum.eth.v1alpha1";
-option php_namespace = "Ethereum\\Eth\\v1alpha1";
-
-// Beacon node validator API
-//
-// The beacon node validator API enables a validator to connect
-// and perform its obligations on the Ethereum 2.0 phase 0 beacon chain.
-service BeaconNodeValidator {
- // Retrieves validator duties for the requested validators.
- //
- // The duties consist of:
- // Proposer - the validator that creates a beacon chain block.
- // Attester — a validator that is part of a committee that needs to sign off on a beacon chain
- // block while simultaneously creating a cross link to a recent shard block on a particular shard chain.
- // The server returns a list of duties which are the actions should be performed by validators for a given epoch.
- // Validator duties should be polled every epoch, but due to chain reorg of >MIN_SEED_LOOKAHEAD could occur,
- // the validator duties could chain. For complete safety, it is recommended to poll at every slot to ensure
- // validator is fully aware of any sudden chain reorg.
- rpc GetDuties(DutiesRequest) returns (DutiesResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/duties"
- };
- }
-
- // Stream validator duties for the requested validators.
- //
- // The duties consist of:
- // Proposer - the validator that creates a beacon chain block.
- // Attester — a validator that is part of a committee that needs to sign off on a beacon chain
- rpc StreamDuties(DutiesRequest) returns (stream DutiesResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/duties/stream"
- };
- }
-
- // DomainData fetches the current BLS signature domain version information from the
- // running beacon node's state. This information is used when validators sign
- // blocks and attestations appropriately based on their duty.
- rpc DomainData(DomainRequest) returns (DomainResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/domain"
- };
- }
-
- // WaitForChainStart queries the logs of the Validator Deposit Contract on the Ethereum
- // proof-of-work chain to verify the beacon chain has started its runtime and
- // validators are ready to begin their responsibilities.
- //
- // If the chain has not yet started, this endpoint starts a server-side stream which updates
- // the client when the beacon chain is ready.
- rpc WaitForChainStart(google.protobuf.Empty) returns (stream ChainStartResponse) {
- option deprecated = true;
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/chainstart/stream"
- };
- }
-
- // WaitForActivation checks if a validator public key exists in the active validator
- // registry of the current beacon state. If the validator is NOT yet active, it starts a
- // server-side stream which updates the client whenever the validator becomes active in
- // the beacon node's state.
- //
- // The input to this endpoint is a list of validator public keys, and the corresponding
- // stream will respond until at least a single corresponding validator to those
- // keys is activated.
- rpc WaitForActivation(ValidatorActivationRequest) returns (stream ValidatorActivationResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/activation/stream"
- };
- }
-
- // ValidatorIndex retrieves a validator's index location in the beacon state's
- // validator registry looking up whether the validator exists based on its
- // public key. This method returns NOT_FOUND if no index is found for the public key
- // specified in the request.
- rpc ValidatorIndex(ValidatorIndexRequest) returns (ValidatorIndexResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/index"
- };
- }
-
- // ValidatorStatus returns a validator's status based on the current epoch.
- // The request can specify either a validator's public key or validator index.
- //
- // The status response can be one of the following:
- // DEPOSITED - validator's deposit has been recognized by Ethereum 1, not yet recognized by Ethereum 2.
- // PENDING - validator is in Ethereum 2's activation queue.
- // ACTIVE - validator is active.
- // EXITING - validator has initiated an an exit request, or has dropped below the ejection balance and is being kicked out.
- // EXITED - validator is no longer validating.
- // SLASHING - validator has been kicked out due to meeting a slashing condition.
- // UNKNOWN_STATUS - validator does not have a known status in the network.
- rpc ValidatorStatus(ValidatorStatusRequest) returns (ValidatorStatusResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/status"
- };
- }
-
- // MultipleValidatorStatus returns a list of validator statuses on the current epoch.
- // The request can specify a list of validator public keys.
- //
- // Returns a list of ValidatorStatusResponses.
- rpc MultipleValidatorStatus(MultipleValidatorStatusRequest) returns (MultipleValidatorStatusResponse) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/statuses"
- };
- }
-
- // Retrieves the latest valid beacon block to be proposed on the beacon chain.
- //
- // The server returns a new beacon block, without proposer signature, that can be
- // proposed on the beacon chain. The block should be filled with all the necessary
- // data for proposer to sign.
- rpc GetBlock(BlockRequest) returns (BeaconBlock) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/block"
- };
- }
-
- // Sends the newly signed beacon block to beacon node.
- //
- // The validator sends the newly signed beacon block to the beacon node so the beacon block can
- // be included in the beacon chain. The beacon node is expected to validate and process the
- // beacon block into its state.
- rpc ProposeBlock(SignedBeaconBlock) returns (ProposeResponse) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/block"
- body: "*"
- };
- }
-
- // Retrieves the latest valid attestation data to be attested on the beacon chain.
- //
- // The server returns the latest valid data which represents the correct vote
- // for the head of the beacon chain,
- rpc GetAttestationData(AttestationDataRequest) returns (AttestationData) {
- option (google.api.http) = {
- get: "/eth/v1alpha1/validator/attestation"
- };
- }
-
- // Sends the newly signed attestation to beacon node.
- //
- // The validator sends the newly signed attestation to the beacon node for the attestation to
- // be included in the beacon chain. The beacon node is expected to validate and publish attestation on
- // appropriate committee subnet.
- rpc ProposeAttestation(Attestation) returns (AttestResponse) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/attestation"
- body: "*"
- };
- }
-
-
- // Submit selection proof to the beacon node to aggregate all matching wire attestations with the same data root.
- // the beacon node responses with an aggregate and proof object back to validator to sign over.
- rpc SubmitAggregateSelectionProof(AggregateSelectionRequest) returns (AggregateSelectionResponse) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/aggregate"
- body: "*"
- };
- }
-
- // Submit a signed aggregate and proof object, the beacon node will broadcast the
- // signed aggregated attestation and proof object.
- rpc SubmitSignedAggregateSelectionProof(SignedAggregateSubmitRequest) returns (SignedAggregateSubmitResponse) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/aggregate"
- body: "*"
- };
- }
-
- // Propose to leave the list of active validators.
- //
- // The beacon node is expected to validate the request and make it available for inclusion in
- // the next proposed block.
- rpc ProposeExit(SignedVoluntaryExit) returns (ProposeExitResponse) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/exit"
- body: "*"
- };
- }
-
- // Subscribe to particular committee ID subnets given validator's duty.
- //
- // The beacon node is expected to subscribe to the committee ID subnet given by the request. With this,
- // beacon node serving attesters can find persistent peers on the subnet to publish attestation,
- // and beacon node serving aggregator can join the subnet.
- rpc SubscribeCommitteeSubnets(CommitteeSubnetsSubscribeRequest) returns (google.protobuf.Empty) {
- option (google.api.http) = {
- post: "/eth/v1alpha1/validator/subnet/subscribe"
- body: "*"
- };
- }
-}
-
-message DomainRequest {
- // The epoch for which the domain is being requested.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // The bytes domain specified by the validator.
- bytes domain = 2;
-}
-
-message DomainResponse {
- // The signature domain is a byte array used by validators when
- // signing data related to block proposals and attestations.
- bytes signature_domain = 1;
-}
-
-message ValidatorActivationRequest {
- // A list of 48 byte validator public keys.
- repeated bytes public_keys = 1 [(ethereum.eth.ext.ssz_size) = "?,48"];
-}
-
-message ValidatorActivationResponse {
- message Status {
- // A 48 byte validator public key.
- bytes public_key = 1;
-
- // A wrapper representing a validator's status object.
- ValidatorStatusResponse status = 2;
-
- // The validators index in the beacon state.
- uint64 index = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- }
- // A list of validator statuses mapped 1-to-1 with the public keys
- // in the request.
- repeated Status statuses = 1;
-}
-
-message ChainStartResponse {
- // A boolean specifying whether or not the chain has started.
- bool started = 1;
-
- // The genesis time of the beacon chain.
- uint64 genesis_time = 2;
-
- // 32 byte hash tree root of the genesis validator set.
- bytes genesis_validators_root = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message SyncedResponse {
- // A boolean specifying whether or not the beacon node is synced and ready for the validator.
- bool synced = 1;
-
- // The genesis time of the beacon chain.
- uint64 genesis_time = 2;
-}
-
-message ValidatorIndexRequest {
- // A 48 byte validator public key.
- bytes public_key = 1 [(ethereum.eth.ext.ssz_size) = "48"];
-}
-
-message ValidatorIndexResponse {
- // The validator's index in the beacon chain state's validator registry.
- uint64 index = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message ValidatorStatusRequest {
- // A 48 byte validator public key.
- bytes public_key = 1 [(ethereum.eth.ext.ssz_size) = "48"];
-}
-
-enum ValidatorStatus {
- UNKNOWN_STATUS = 0;
- DEPOSITED = 1;
- PENDING = 2;
- ACTIVE = 3;
- EXITING = 4;
- SLASHING = 5;
- EXITED = 6;
- INVALID = 7;
- PARTIALLY_DEPOSITED = 8;
-}
-
-message ValidatorStatusResponse {
- // The corresponding validator status.
- ValidatorStatus status = 1;
-
- // The block number of the Ethereum proof-of-work chain
- // where the deposit for the validator was included.
- uint64 eth1_deposit_block_number = 2;
-
- // The slot in the beacon chain in which the validator's
- // deposit was included in a block.
- uint64 deposit_inclusion_slot = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // The epoch in the beacon chain in which the validator
- // is determined as active.
- uint64 activation_epoch = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // The position in the activation queue of pending validators.
- uint64 position_in_activation_queue = 5;
-}
-
-message MultipleValidatorStatusRequest {
- // A list of 48 byte validator public keys.
- repeated bytes public_keys = 1 [(ethereum.eth.ext.ssz_size) = "?,48"];
- // A list of validator indices.
- repeated int64 indices = 2;
-}
-
-message MultipleValidatorStatusResponse {
- // A list of 48 byte validator public keys.
- repeated bytes public_keys = 1 [(ethereum.eth.ext.ssz_size) = "?,48"];
- // A list of ValidatorStatusResponses mapped 1-to-1 with the public keys.
- repeated ValidatorStatusResponse statuses = 2;
- // A list of validator indices.
- repeated uint64 indices = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-}
-
-message DutiesRequest {
- // Epoch at which validators should perform their duties.
- uint64 epoch = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Array of byte encoded BLS public keys.
- repeated bytes public_keys = 2 [(ethereum.eth.ext.ssz_size) = "?,48"];
-}
-
-message DutiesResponse {
- repeated Duty duties = 1 [deprecated = true];
-
- repeated Duty current_epoch_duties = 2;
-
- repeated Duty next_epoch_duties = 3;
-
- message Duty {
- // The committee a validator is assigned to.
- repeated uint64 committee = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // The index into the committee where the validator belongs in.
- uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
-
- // Slot at which a validator must attest.
- uint64 attester_slot = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Slots at which a validator must propose a beacon chain block.
- repeated uint64 proposer_slots = 4 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // 48 byte BLS public key for the validator who's assigned to perform a duty.
- bytes public_key = 5 [(ethereum.eth.ext.ssz_size) = "48"];
-
- // The current status of the validator assigned to perform the duty.
- ValidatorStatus status = 6;
-
- // The index of the validator in the beacon state.
- uint64 validator_index = 7 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
- }
-}
-
-message BlockRequest {
- // Slot for which the block should be proposed.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Validator's 32 byte randao reveal secret of the current epoch.
- bytes randao_reveal = 2 [(ethereum.eth.ext.ssz_size) = "48"];
-
- // Validator's 32 byte graffiti message for the new block.
- bytes graffiti = 3 [(ethereum.eth.ext.ssz_size) = "32"];
-
-}
-
-message ProposeResponse {
- // The block root of the successfully proposed beacon block.
- bytes block_root = 1 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message ProposeExitResponse {
- // The root of the successfully proposed voluntary exit.
- bytes exit_root = 1 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message AttestationDataRequest {
- // Slot for which the attestation should be created.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
-
- // Committee index the attestation should be created for.
- uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
-}
-
-message AttestResponse {
- // The root of the attestation data successfully submitted to the beacon node.
- bytes attestation_data_root = 1 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message AggregateSelectionRequest {
- // Slot for which the aggregation request applies.
- uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- // Committee index of the validator at the given slot.
- uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
- // 48 byte public key of the validator.
- bytes public_key = 3 [(ethereum.eth.ext.ssz_size) = "48", (ethereum.eth.ext.spec_name) = "pubkey"];
- // 96 byte signature of the validator on the slot. This is used as proof that the validator is
- // an aggregator for the given slot.
- bytes slot_signature = 4 [(ethereum.eth.ext.ssz_size) = "96"];
-}
-
-message AggregateSelectionResponse {
- // The aggregate and proof message without the signature.
- AggregateAttestationAndProof aggregate_and_proof = 1;
-}
-
-message SignedAggregateSubmitRequest {
- // The signed aggregate and proof message with the signature.
- SignedAggregateAttestationAndProof signed_aggregate_and_proof = 1;
-}
-
-message SignedAggregateSubmitResponse {
- // The 32 byte hash tree root of the aggregated attestation data.
- bytes attestation_data_root = 1 [(ethereum.eth.ext.ssz_size) = "32"];
-}
-
-message CommitteeSubnetsSubscribeRequest {
- // A list of intended slots to subscribe.
- repeated uint64 slots = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"];
- // A list of intended committee ids to subscribe. It is mapped 1-to-1 with the slots
- repeated uint64 committee_ids = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"];
- // Whether to subscribe as an aggregator or by default attester.
- // It is mapped 1-to-1 with the slots and committee ids.
- // Subscribe as an aggregator means to join the subnet.
- // Subscribe as an attester means finding persistent peers on the subnet to be able to publish attestations.
- repeated bool is_aggregator = 3;
-}
-
-// An Ethereum 2.0 validator.
-message Validator {
- // 48 byte BLS public key used for the validator's activities.
- bytes public_key = 1 [(ethereum.eth.ext.ssz_size) = "48", (ethereum.eth.ext.spec_name) = "pubkey"];
-
- // 32 byte hash of the withdrawal destination public key.
- bytes withdrawal_credentials = 2 [(ethereum.eth.ext.ssz_size) = "32"];
-
- // The validators current effective balance in gwei.
- uint64 effective_balance = 3;
-
- // Whether or not the validator has been slashed.
- bool slashed = 4;
-
- // Epoch when the validator became eligible for activation. This field may
- // be zero if the validator was present in the Ethereum 2.0 genesis. This
- // field is FAR_FUTURE_EPOCH if the validator has not been activated.
- uint64 activation_eligibility_epoch = 5 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Epoch when the validator was activated. This field may be zero if the
- // validator was present in the Ethereum 2.0 genesis. This field is
- // FAR_FUTURE_EPOCH if the validator has not been activated.
- uint64 activation_epoch = 6 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Epoch when the validator was exited. This field is FAR_FUTURE_EPOCH if
- // the validator has not exited.
- // FAR_FUTURE_EPOCH is a constant defined by the official Ethereum 2.0 specification:
- // https://github.com/ethereum/eth2.0-specs/blob/v0.9.2/specs/core/0_beacon-chain.md#constants
- uint64 exit_epoch = 7 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // Epoch when the validator is eligible to withdraw their funds. This field
- // is FAR_FUTURE_EPOCH if the validator has not exited.
- // FAR_FUTURE_EPOCH is a constant defined by the official Ethereum 2.0 specification:
- // https://github.com/ethereum/eth2.0-specs/blob/v0.9.2/specs/core/0_beacon-chain.md#constants
- uint64 withdrawable_epoch = 8 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-}
-
-// ValidatorParticipation stores participation metrics during a given epoch.
-message ValidatorParticipation {
- // Percentage of validator participation in the given epoch. This field
- // contains a value between 0 and 1.
- float global_participation_rate = 1 [deprecated = true];
-
- // The total amount of ether, in gwei, that has been used in voting.
- uint64 voted_ether = 2 [deprecated = true];
-
- // The total amount of ether, in gwei, that is eligible for voting.
- uint64 eligible_ether = 3 [deprecated = true];
-
- // Total staked gwei that was active (i.e. eligible to vote) during the current epoch.
- uint64 current_epoch_active_gwei = 4;
- // Total staked gwei that had attestations included in a block during the current epoch,
- // attestations by the same validator do not increase this figure.
- uint64 current_epoch_attesting_gwei = 5;
- // Total staked gwei that attested to the majority-elected Casper FFG target epoch during the current epoch.
- uint64 current_epoch_target_attesting_gwei = 6;
- // Same as current_epoch_active_gwei but for previous epoch.
- uint64 previous_epoch_active_gwei = 7;
- // Same as current_epoch_attesting_gwei but for previous epoch.
- uint64 previous_epoch_attesting_gwei = 8;
- // Same as current_epoch_target_attesting_gwei but for previous epoch.
- uint64 previous_epoch_target_attesting_gwei = 9;
- // Total staked gwei that attested to a head beacon block that is in the canonical chain.
- uint64 previous_epoch_head_attesting_gwei = 10;
-}
-
-// ValidatorInfo gives information about the state of a validator at a certain epoch.
-message ValidatorInfo {
- // The validator's 48 byte BLS public key.
- bytes public_key = 1;
-
- // The validator's index in the beacon state.
- uint64 index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.ValidatorIndex"];
-
- // The epoch for which the information pertains.
- uint64 epoch = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Epoch"];
-
- // The validator's current status.
- ValidatorStatus status = 4;
-
- // The unix timestamp when the validator enters the next state.
- // This could be in the past. Some values depend on chain operation and so will vary from epoch to epoch.
- // Specific times for each state are as follows:
- // - state == DEPOSITED: time at which Ethereum 1 deposit will be stored on-chain by Ethereum 2 (variable, can be 0).
- // - state == PENDING: time at which validator will be activated (variable).
- // - state == ACTIVE: no value (next transition depends on user and network actions).
- // - state == EXITING: time at which validator will exit.
- // - state == SLASHING: time at which validator will exit.
- // - state == EXITED: time at which validator funds will be withdrawable.
- uint64 transition_timestamp = 5;
-
- // The validator's current balance in GWei.
- uint64 balance = 6;
-
- // The validator's current effective balance in GWei.
- // Only valid for states ACTIVE, EXITING, SLASHING.
- uint64 effective_balance = 7;
-}
\ No newline at end of file
diff --git a/proto/eth/v1alpha1/validator_pb2.py b/proto/eth/v1alpha1/validator_pb2.py
deleted file mode 100644
index c9521d2..0000000
--- a/proto/eth/v1alpha1/validator_pb2.py
+++ /dev/null
@@ -1,1867 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler. DO NOT EDIT!
-# source: eth/v1alpha1/validator.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-from eth.ext import options_pb2 as eth_dot_ext_dot_options__pb2
-from eth.v1alpha1 import beacon_block_pb2 as eth_dot_v1alpha1_dot_beacon__block__pb2
-from eth.v1alpha1 import attestation_pb2 as eth_dot_v1alpha1_dot_attestation__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
- name='eth/v1alpha1/validator.proto',
- package='ethereum.eth.v1alpha1',
- syntax='proto3',
- serialized_options=b'\n\031org.ethereum.eth.v1alpha1B\016ValidatorProtoP\001Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\252\002\025Ethereum.Eth.v1alpha1\312\002\025Ethereum\\Eth\\v1alpha1',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\x1c\x65th/v1alpha1/validator.proto\x12\x15\x65thereum.eth.v1alpha1\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x15\x65th/ext/options.proto\x1a\x1f\x65th/v1alpha1/beacon_block.proto\x1a\x1e\x65th/v1alpha1/attestation.proto\"]\n\rDomainRequest\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x0e\n\x06\x64omain\x18\x02 \x01(\x0c\"*\n\x0e\x44omainResponse\x12\x18\n\x10signature_domain\x18\x01 \x01(\x0c\";\n\x1aValidatorActivationRequest\x12\x1d\n\x0bpublic_keys\x18\x01 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\"\x90\x02\n\x1bValidatorActivationResponse\x12K\n\x08statuses\x18\x01 \x03(\x0b\x32\x39.ethereum.eth.v1alpha1.ValidatorActivationResponse.Status\x1a\xa3\x01\n\x06Status\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\x12>\n\x06status\x18\x02 \x01(\x0b\x32..ethereum.eth.v1alpha1.ValidatorStatusResponse\x12\x45\n\x05index\x18\x03 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"d\n\x12\x43hainStartResponse\x12\x0f\n\x07started\x18\x01 \x01(\x08\x12\x14\n\x0cgenesis_time\x18\x02 \x01(\x04\x12\'\n\x17genesis_validators_root\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"6\n\x0eSyncedResponse\x12\x0e\n\x06synced\x18\x01 \x01(\x08\x12\x14\n\x0cgenesis_time\x18\x02 \x01(\x04\"3\n\x15ValidatorIndexRequest\x12\x1a\n\npublic_key\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38\"_\n\x16ValidatorIndexResponse\x12\x45\n\x05index\x18\x01 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"4\n\x16ValidatorStatusRequest\x12\x1a\n\npublic_key\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38\"\xb1\x02\n\x17ValidatorStatusResponse\x12\x36\n\x06status\x18\x01 \x01(\x0e\x32&.ethereum.eth.v1alpha1.ValidatorStatus\x12!\n\x19\x65th1_deposit_block_number\x18\x02 \x01(\x04\x12L\n\x16\x64\x65posit_inclusion_slot\x18\x03 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12G\n\x10\x61\x63tivation_epoch\x18\x04 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12$\n\x1cposition_in_activation_queue\x18\x05 \x01(\x04\"P\n\x1eMultipleValidatorStatusRequest\x12\x1d\n\x0bpublic_keys\x18\x01 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12\x0f\n\x07indices\x18\x02 \x03(\x03\"\xcb\x01\n\x1fMultipleValidatorStatusResponse\x12\x1d\n\x0bpublic_keys\x18\x01 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\x12@\n\x08statuses\x18\x02 \x03(\x0b\x32..ethereum.eth.v1alpha1.ValidatorStatusResponse\x12G\n\x07indices\x18\x03 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"l\n\rDutiesRequest\x12<\n\x05\x65poch\x18\x01 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x1d\n\x0bpublic_keys\x18\x02 \x03(\x0c\x42\x08\x8a\xb5\x18\x04?,48\"\xb6\x05\n\x0e\x44utiesResponse\x12>\n\x06\x64uties\x18\x01 \x03(\x0b\x32*.ethereum.eth.v1alpha1.DutiesResponse.DutyB\x02\x18\x01\x12H\n\x14\x63urrent_epoch_duties\x18\x02 \x03(\x0b\x32*.ethereum.eth.v1alpha1.DutiesResponse.Duty\x12\x45\n\x11next_epoch_duties\x18\x03 \x03(\x0b\x32*.ethereum.eth.v1alpha1.DutiesResponse.Duty\x1a\xd2\x03\n\x04\x44uty\x12I\n\tcommittee\x18\x01 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12O\n\x0f\x63ommittee_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\x12\x43\n\rattester_slot\x18\x03 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x44\n\x0eproposer_slots\x18\x04 \x03(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x1a\n\npublic_key\x18\x05 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38\x12\x36\n\x06status\x18\x06 \x01(\x0e\x32&.ethereum.eth.v1alpha1.ValidatorStatus\x12O\n\x0fvalidator_index\x18\x07 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\"\x83\x01\n\x0c\x42lockRequest\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12\x1d\n\rrandao_reveal\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x34\x38\x12\x18\n\x08graffiti\x18\x03 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"-\n\x0fProposeResponse\x12\x1a\n\nblock_root\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"0\n\x13ProposeExitResponse\x12\x19\n\texit_root\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"\xa5\x01\n\x16\x41ttestationDataRequest\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12O\n\x0f\x63ommittee_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\"7\n\x0e\x41ttestResponse\x12%\n\x15\x61ttestation_data_root\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"\xee\x01\n\x19\x41ggregateSelectionRequest\x12:\n\x04slot\x18\x01 \x01(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12O\n\x0f\x63ommittee_index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\x12$\n\npublic_key\x18\x03 \x01(\x0c\x42\x10\x8a\xb5\x18\x02\x34\x38\x9a\xb5\x18\x06pubkey\x12\x1e\n\x0eslot_signature\x18\x04 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x39\x36\"n\n\x1a\x41ggregateSelectionResponse\x12P\n\x13\x61ggregate_and_proof\x18\x01 \x01(\x0b\x32\x33.ethereum.eth.v1alpha1.AggregateAttestationAndProof\"}\n\x1cSignedAggregateSubmitRequest\x12]\n\x1asigned_aggregate_and_proof\x18\x01 \x01(\x0b\x32\x39.ethereum.eth.v1alpha1.SignedAggregateAttestationAndProof\"F\n\x1dSignedAggregateSubmitResponse\x12%\n\x15\x61ttestation_data_root\x18\x01 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\"\xc5\x01\n CommitteeSubnetsSubscribeRequest\x12;\n\x05slots\x18\x01 \x03(\x04\x42,\x82\xb5\x18(github.com/prysmaticlabs/eth2-types.Slot\x12M\n\rcommittee_ids\x18\x02 \x03(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.CommitteeIndex\x12\x15\n\ris_aggregator\x18\x03 \x03(\x08\"\xb1\x03\n\tValidator\x12$\n\npublic_key\x18\x01 \x01(\x0c\x42\x10\x8a\xb5\x18\x02\x34\x38\x9a\xb5\x18\x06pubkey\x12&\n\x16withdrawal_credentials\x18\x02 \x01(\x0c\x42\x06\x8a\xb5\x18\x02\x33\x32\x12\x19\n\x11\x65\x66\x66\x65\x63tive_balance\x18\x03 \x01(\x04\x12\x0f\n\x07slashed\x18\x04 \x01(\x08\x12S\n\x1c\x61\x63tivation_eligibility_epoch\x18\x05 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12G\n\x10\x61\x63tivation_epoch\x18\x06 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x41\n\nexit_epoch\x18\x07 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12I\n\x12withdrawable_epoch\x18\x08 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\"\x8f\x03\n\x16ValidatorParticipation\x12%\n\x19global_participation_rate\x18\x01 \x01(\x02\x42\x02\x18\x01\x12\x17\n\x0bvoted_ether\x18\x02 \x01(\x04\x42\x02\x18\x01\x12\x1a\n\x0e\x65ligible_ether\x18\x03 \x01(\x04\x42\x02\x18\x01\x12!\n\x19\x63urrent_epoch_active_gwei\x18\x04 \x01(\x04\x12$\n\x1c\x63urrent_epoch_attesting_gwei\x18\x05 \x01(\x04\x12+\n#current_epoch_target_attesting_gwei\x18\x06 \x01(\x04\x12\"\n\x1aprevious_epoch_active_gwei\x18\x07 \x01(\x04\x12%\n\x1dprevious_epoch_attesting_gwei\x18\x08 \x01(\x04\x12,\n$previous_epoch_target_attesting_gwei\x18\t \x01(\x04\x12*\n\"previous_epoch_head_attesting_gwei\x18\n \x01(\x04\"\xaa\x02\n\rValidatorInfo\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\x12\x45\n\x05index\x18\x02 \x01(\x04\x42\x36\x82\xb5\x18\x32github.com/prysmaticlabs/eth2-types.ValidatorIndex\x12<\n\x05\x65poch\x18\x03 \x01(\x04\x42-\x82\xb5\x18)github.com/prysmaticlabs/eth2-types.Epoch\x12\x36\n\x06status\x18\x04 \x01(\x0e\x32&.ethereum.eth.v1alpha1.ValidatorStatus\x12\x1c\n\x14transition_timestamp\x18\x05 \x01(\x04\x12\x0f\n\x07\x62\x61lance\x18\x06 \x01(\x04\x12\x19\n\x11\x65\x66\x66\x65\x63tive_balance\x18\x07 \x01(\x04*\x9a\x01\n\x0fValidatorStatus\x12\x12\n\x0eUNKNOWN_STATUS\x10\x00\x12\r\n\tDEPOSITED\x10\x01\x12\x0b\n\x07PENDING\x10\x02\x12\n\n\x06\x41\x43TIVE\x10\x03\x12\x0b\n\x07\x45XITING\x10\x04\x12\x0c\n\x08SLASHING\x10\x05\x12\n\n\x06\x45XITED\x10\x06\x12\x0b\n\x07INVALID\x10\x07\x12\x17\n\x13PARTIALLY_DEPOSITED\x10\x08\x32\xb6\x13\n\x13\x42\x65\x61\x63onNodeValidator\x12\x80\x01\n\tGetDuties\x12$.ethereum.eth.v1alpha1.DutiesRequest\x1a%.ethereum.eth.v1alpha1.DutiesResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/eth/v1alpha1/validator/duties\x12\x8c\x01\n\x0cStreamDuties\x12$.ethereum.eth.v1alpha1.DutiesRequest\x1a%.ethereum.eth.v1alpha1.DutiesResponse\"-\x82\xd3\xe4\x93\x02\'\x12%/eth/v1alpha1/validator/duties/stream0\x01\x12\x81\x01\n\nDomainData\x12$.ethereum.eth.v1alpha1.DomainRequest\x1a%.ethereum.eth.v1alpha1.DomainResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/eth/v1alpha1/validator/domain\x12\x8e\x01\n\x11WaitForChainStart\x12\x16.google.protobuf.Empty\x1a).ethereum.eth.v1alpha1.ChainStartResponse\"4\x88\x02\x01\x82\xd3\xe4\x93\x02+\x12)/eth/v1alpha1/validator/chainstart/stream0\x01\x12\xaf\x01\n\x11WaitForActivation\x12\x31.ethereum.eth.v1alpha1.ValidatorActivationRequest\x1a\x32.ethereum.eth.v1alpha1.ValidatorActivationResponse\"1\x82\xd3\xe4\x93\x02+\x12)/eth/v1alpha1/validator/activation/stream0\x01\x12\x94\x01\n\x0eValidatorIndex\x12,.ethereum.eth.v1alpha1.ValidatorIndexRequest\x1a-.ethereum.eth.v1alpha1.ValidatorIndexResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/eth/v1alpha1/validator/index\x12\x98\x01\n\x0fValidatorStatus\x12-.ethereum.eth.v1alpha1.ValidatorStatusRequest\x1a..ethereum.eth.v1alpha1.ValidatorStatusResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/eth/v1alpha1/validator/status\x12\xb2\x01\n\x17MultipleValidatorStatus\x12\x35.ethereum.eth.v1alpha1.MultipleValidatorStatusRequest\x1a\x36.ethereum.eth.v1alpha1.MultipleValidatorStatusResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /eth/v1alpha1/validator/statuses\x12z\n\x08GetBlock\x12#.ethereum.eth.v1alpha1.BlockRequest\x1a\".ethereum.eth.v1alpha1.BeaconBlock\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/eth/v1alpha1/validator/block\x12\x8a\x01\n\x0cProposeBlock\x12(.ethereum.eth.v1alpha1.SignedBeaconBlock\x1a&.ethereum.eth.v1alpha1.ProposeResponse\"(\x82\xd3\xe4\x93\x02\"\"\x1d/eth/v1alpha1/validator/block:\x01*\x12\x98\x01\n\x12GetAttestationData\x12-.ethereum.eth.v1alpha1.AttestationDataRequest\x1a&.ethereum.eth.v1alpha1.AttestationData\"+\x82\xd3\xe4\x93\x02%\x12#/eth/v1alpha1/validator/attestation\x12\x8f\x01\n\x12ProposeAttestation\x12\".ethereum.eth.v1alpha1.Attestation\x1a%.ethereum.eth.v1alpha1.AttestResponse\".\x82\xd3\xe4\x93\x02(\"#/eth/v1alpha1/validator/attestation:\x01*\x12\xb2\x01\n\x1dSubmitAggregateSelectionProof\x12\x30.ethereum.eth.v1alpha1.AggregateSelectionRequest\x1a\x31.ethereum.eth.v1alpha1.AggregateSelectionResponse\",\x82\xd3\xe4\x93\x02&\"!/eth/v1alpha1/validator/aggregate:\x01*\x12\xbe\x01\n#SubmitSignedAggregateSelectionProof\x12\x33.ethereum.eth.v1alpha1.SignedAggregateSubmitRequest\x1a\x34.ethereum.eth.v1alpha1.SignedAggregateSubmitResponse\",\x82\xd3\xe4\x93\x02&\"!/eth/v1alpha1/validator/aggregate:\x01*\x12\x8e\x01\n\x0bProposeExit\x12*.ethereum.eth.v1alpha1.SignedVoluntaryExit\x1a*.ethereum.eth.v1alpha1.ProposeExitResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/eth/v1alpha1/validator/exit:\x01*\x12\xa1\x01\n\x19SubscribeCommitteeSubnets\x12\x37.ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest\x1a\x16.google.protobuf.Empty\"3\x82\xd3\xe4\x93\x02-\"(/eth/v1alpha1/validator/subnet/subscribe:\x01*B\x95\x01\n\x19org.ethereum.eth.v1alpha1B\x0eValidatorProtoP\x01Z6github.com/prysmaticlabs/ethereumapis/eth/v1alpha1;eth\xaa\x02\x15\x45thereum.Eth.v1alpha1\xca\x02\x15\x45thereum\\Eth\\v1alpha1b\x06proto3'
- ,
- dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,eth_dot_ext_dot_options__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_beacon__block__pb2.DESCRIPTOR,eth_dot_v1alpha1_dot_attestation__pb2.DESCRIPTOR,])
-
-_VALIDATORSTATUS = _descriptor.EnumDescriptor(
- name='ValidatorStatus',
- full_name='ethereum.eth.v1alpha1.ValidatorStatus',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='UNKNOWN_STATUS', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='DEPOSITED', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='PENDING', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='ACTIVE', index=3, number=3,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='EXITING', index=4, number=4,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='SLASHING', index=5, number=5,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='EXITED', index=6, number=6,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='INVALID', index=7, number=7,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='PARTIALLY_DEPOSITED', index=8, number=8,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=4790,
- serialized_end=4944,
-)
-_sym_db.RegisterEnumDescriptor(_VALIDATORSTATUS)
-
-ValidatorStatus = enum_type_wrapper.EnumTypeWrapper(_VALIDATORSTATUS)
-UNKNOWN_STATUS = 0
-DEPOSITED = 1
-PENDING = 2
-ACTIVE = 3
-EXITING = 4
-SLASHING = 5
-EXITED = 6
-INVALID = 7
-PARTIALLY_DEPOSITED = 8
-
-
-
-_DOMAINREQUEST = _descriptor.Descriptor(
- name='DomainRequest',
- full_name='ethereum.eth.v1alpha1.DomainRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.DomainRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='domain', full_name='ethereum.eth.v1alpha1.DomainRequest.domain', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=202,
- serialized_end=295,
-)
-
-
-_DOMAINRESPONSE = _descriptor.Descriptor(
- name='DomainResponse',
- full_name='ethereum.eth.v1alpha1.DomainResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='signature_domain', full_name='ethereum.eth.v1alpha1.DomainResponse.signature_domain', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=297,
- serialized_end=339,
-)
-
-
-_VALIDATORACTIVATIONREQUEST = _descriptor.Descriptor(
- name='ValidatorActivationRequest',
- full_name='ethereum.eth.v1alpha1.ValidatorActivationRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.ValidatorActivationRequest.public_keys', index=0,
- number=1, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=341,
- serialized_end=400,
-)
-
-
-_VALIDATORACTIVATIONRESPONSE_STATUS = _descriptor.Descriptor(
- name='Status',
- full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse.Status',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse.Status.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='status', full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse.Status.status', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse.Status.index', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=512,
- serialized_end=675,
-)
-
-_VALIDATORACTIVATIONRESPONSE = _descriptor.Descriptor(
- name='ValidatorActivationResponse',
- full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='statuses', full_name='ethereum.eth.v1alpha1.ValidatorActivationResponse.statuses', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_VALIDATORACTIVATIONRESPONSE_STATUS, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=403,
- serialized_end=675,
-)
-
-
-_CHAINSTARTRESPONSE = _descriptor.Descriptor(
- name='ChainStartResponse',
- full_name='ethereum.eth.v1alpha1.ChainStartResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='started', full_name='ethereum.eth.v1alpha1.ChainStartResponse.started', index=0,
- number=1, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_time', full_name='ethereum.eth.v1alpha1.ChainStartResponse.genesis_time', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_validators_root', full_name='ethereum.eth.v1alpha1.ChainStartResponse.genesis_validators_root', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=677,
- serialized_end=777,
-)
-
-
-_SYNCEDRESPONSE = _descriptor.Descriptor(
- name='SyncedResponse',
- full_name='ethereum.eth.v1alpha1.SyncedResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='synced', full_name='ethereum.eth.v1alpha1.SyncedResponse.synced', index=0,
- number=1, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='genesis_time', full_name='ethereum.eth.v1alpha1.SyncedResponse.genesis_time', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=779,
- serialized_end=833,
-)
-
-
-_VALIDATORINDEXREQUEST = _descriptor.Descriptor(
- name='ValidatorIndexRequest',
- full_name='ethereum.eth.v1alpha1.ValidatorIndexRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorIndexRequest.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=835,
- serialized_end=886,
-)
-
-
-_VALIDATORINDEXRESPONSE = _descriptor.Descriptor(
- name='ValidatorIndexResponse',
- full_name='ethereum.eth.v1alpha1.ValidatorIndexResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.ValidatorIndexResponse.index', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=888,
- serialized_end=983,
-)
-
-
-_VALIDATORSTATUSREQUEST = _descriptor.Descriptor(
- name='ValidatorStatusRequest',
- full_name='ethereum.eth.v1alpha1.ValidatorStatusRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorStatusRequest.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=985,
- serialized_end=1037,
-)
-
-
-_VALIDATORSTATUSRESPONSE = _descriptor.Descriptor(
- name='ValidatorStatusResponse',
- full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='status', full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse.status', index=0,
- number=1, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='eth1_deposit_block_number', full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse.eth1_deposit_block_number', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='deposit_inclusion_slot', full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse.deposit_inclusion_slot', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activation_epoch', full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse.activation_epoch', index=3,
- number=4, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='position_in_activation_queue', full_name='ethereum.eth.v1alpha1.ValidatorStatusResponse.position_in_activation_queue', index=4,
- number=5, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1040,
- serialized_end=1345,
-)
-
-
-_MULTIPLEVALIDATORSTATUSREQUEST = _descriptor.Descriptor(
- name='MultipleValidatorStatusRequest',
- full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusRequest.public_keys', index=0,
- number=1, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusRequest.indices', index=1,
- number=2, type=3, cpp_type=2, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1347,
- serialized_end=1427,
-)
-
-
-_MULTIPLEVALIDATORSTATUSRESPONSE = _descriptor.Descriptor(
- name='MultipleValidatorStatusResponse',
- full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusResponse.public_keys', index=0,
- number=1, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='statuses', full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusResponse.statuses', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='indices', full_name='ethereum.eth.v1alpha1.MultipleValidatorStatusResponse.indices', index=2,
- number=3, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1430,
- serialized_end=1633,
-)
-
-
-_DUTIESREQUEST = _descriptor.Descriptor(
- name='DutiesRequest',
- full_name='ethereum.eth.v1alpha1.DutiesRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.DutiesRequest.epoch', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_keys', full_name='ethereum.eth.v1alpha1.DutiesRequest.public_keys', index=1,
- number=2, type=12, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\004?,48', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1635,
- serialized_end=1743,
-)
-
-
-_DUTIESRESPONSE_DUTY = _descriptor.Descriptor(
- name='Duty',
- full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='committee', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.committee', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_index', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.committee_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='attester_slot', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.attester_slot', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='proposer_slots', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.proposer_slots', index=3,
- number=4, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.public_key', index=4,
- number=5, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='status', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.status', index=5,
- number=6, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validator_index', full_name='ethereum.eth.v1alpha1.DutiesResponse.Duty.validator_index', index=6,
- number=7, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1974,
- serialized_end=2440,
-)
-
-_DUTIESRESPONSE = _descriptor.Descriptor(
- name='DutiesResponse',
- full_name='ethereum.eth.v1alpha1.DutiesResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='duties', full_name='ethereum.eth.v1alpha1.DutiesResponse.duties', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='current_epoch_duties', full_name='ethereum.eth.v1alpha1.DutiesResponse.current_epoch_duties', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_epoch_duties', full_name='ethereum.eth.v1alpha1.DutiesResponse.next_epoch_duties', index=2,
- number=3, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[_DUTIESRESPONSE_DUTY, ],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1746,
- serialized_end=2440,
-)
-
-
-_BLOCKREQUEST = _descriptor.Descriptor(
- name='BlockRequest',
- full_name='ethereum.eth.v1alpha1.BlockRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.BlockRequest.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='randao_reveal', full_name='ethereum.eth.v1alpha1.BlockRequest.randao_reveal', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='graffiti', full_name='ethereum.eth.v1alpha1.BlockRequest.graffiti', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2443,
- serialized_end=2574,
-)
-
-
-_PROPOSERESPONSE = _descriptor.Descriptor(
- name='ProposeResponse',
- full_name='ethereum.eth.v1alpha1.ProposeResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='block_root', full_name='ethereum.eth.v1alpha1.ProposeResponse.block_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2576,
- serialized_end=2621,
-)
-
-
-_PROPOSEEXITRESPONSE = _descriptor.Descriptor(
- name='ProposeExitResponse',
- full_name='ethereum.eth.v1alpha1.ProposeExitResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='exit_root', full_name='ethereum.eth.v1alpha1.ProposeExitResponse.exit_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2623,
- serialized_end=2671,
-)
-
-
-_ATTESTATIONDATAREQUEST = _descriptor.Descriptor(
- name='AttestationDataRequest',
- full_name='ethereum.eth.v1alpha1.AttestationDataRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.AttestationDataRequest.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_index', full_name='ethereum.eth.v1alpha1.AttestationDataRequest.committee_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2674,
- serialized_end=2839,
-)
-
-
-_ATTESTRESPONSE = _descriptor.Descriptor(
- name='AttestResponse',
- full_name='ethereum.eth.v1alpha1.AttestResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attestation_data_root', full_name='ethereum.eth.v1alpha1.AttestResponse.attestation_data_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2841,
- serialized_end=2896,
-)
-
-
-_AGGREGATESELECTIONREQUEST = _descriptor.Descriptor(
- name='AggregateSelectionRequest',
- full_name='ethereum.eth.v1alpha1.AggregateSelectionRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slot', full_name='ethereum.eth.v1alpha1.AggregateSelectionRequest.slot', index=0,
- number=1, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_index', full_name='ethereum.eth.v1alpha1.AggregateSelectionRequest.committee_index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.AggregateSelectionRequest.public_key', index=2,
- number=3, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248\232\265\030\006pubkey', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='slot_signature', full_name='ethereum.eth.v1alpha1.AggregateSelectionRequest.slot_signature', index=3,
- number=4, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00296', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2899,
- serialized_end=3137,
-)
-
-
-_AGGREGATESELECTIONRESPONSE = _descriptor.Descriptor(
- name='AggregateSelectionResponse',
- full_name='ethereum.eth.v1alpha1.AggregateSelectionResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='aggregate_and_proof', full_name='ethereum.eth.v1alpha1.AggregateSelectionResponse.aggregate_and_proof', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3139,
- serialized_end=3249,
-)
-
-
-_SIGNEDAGGREGATESUBMITREQUEST = _descriptor.Descriptor(
- name='SignedAggregateSubmitRequest',
- full_name='ethereum.eth.v1alpha1.SignedAggregateSubmitRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='signed_aggregate_and_proof', full_name='ethereum.eth.v1alpha1.SignedAggregateSubmitRequest.signed_aggregate_and_proof', index=0,
- number=1, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3251,
- serialized_end=3376,
-)
-
-
-_SIGNEDAGGREGATESUBMITRESPONSE = _descriptor.Descriptor(
- name='SignedAggregateSubmitResponse',
- full_name='ethereum.eth.v1alpha1.SignedAggregateSubmitResponse',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='attestation_data_root', full_name='ethereum.eth.v1alpha1.SignedAggregateSubmitResponse.attestation_data_root', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3378,
- serialized_end=3448,
-)
-
-
-_COMMITTEESUBNETSSUBSCRIBEREQUEST = _descriptor.Descriptor(
- name='CommitteeSubnetsSubscribeRequest',
- full_name='ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='slots', full_name='ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest.slots', index=0,
- number=1, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030(github.com/prysmaticlabs/eth2-types.Slot', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='committee_ids', full_name='ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest.committee_ids', index=1,
- number=2, type=4, cpp_type=4, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.CommitteeIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='is_aggregator', full_name='ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest.is_aggregator', index=2,
- number=3, type=8, cpp_type=7, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3451,
- serialized_end=3648,
-)
-
-
-_VALIDATOR = _descriptor.Descriptor(
- name='Validator',
- full_name='ethereum.eth.v1alpha1.Validator',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.Validator.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00248\232\265\030\006pubkey', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='withdrawal_credentials', full_name='ethereum.eth.v1alpha1.Validator.withdrawal_credentials', index=1,
- number=2, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\212\265\030\00232', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='effective_balance', full_name='ethereum.eth.v1alpha1.Validator.effective_balance', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='slashed', full_name='ethereum.eth.v1alpha1.Validator.slashed', index=3,
- number=4, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activation_eligibility_epoch', full_name='ethereum.eth.v1alpha1.Validator.activation_eligibility_epoch', index=4,
- number=5, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='activation_epoch', full_name='ethereum.eth.v1alpha1.Validator.activation_epoch', index=5,
- number=6, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='exit_epoch', full_name='ethereum.eth.v1alpha1.Validator.exit_epoch', index=6,
- number=7, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='withdrawable_epoch', full_name='ethereum.eth.v1alpha1.Validator.withdrawable_epoch', index=7,
- number=8, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=3651,
- serialized_end=4084,
-)
-
-
-_VALIDATORPARTICIPATION = _descriptor.Descriptor(
- name='ValidatorParticipation',
- full_name='ethereum.eth.v1alpha1.ValidatorParticipation',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='global_participation_rate', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.global_participation_rate', index=0,
- number=1, type=2, cpp_type=6, label=1,
- has_default_value=False, default_value=float(0),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='voted_ether', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.voted_ether', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='eligible_ether', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.eligible_ether', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='current_epoch_active_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.current_epoch_active_gwei', index=3,
- number=4, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='current_epoch_attesting_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.current_epoch_attesting_gwei', index=4,
- number=5, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='current_epoch_target_attesting_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.current_epoch_target_attesting_gwei', index=5,
- number=6, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_epoch_active_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.previous_epoch_active_gwei', index=6,
- number=7, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_epoch_attesting_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.previous_epoch_attesting_gwei', index=7,
- number=8, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_epoch_target_attesting_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.previous_epoch_target_attesting_gwei', index=8,
- number=9, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='previous_epoch_head_attesting_gwei', full_name='ethereum.eth.v1alpha1.ValidatorParticipation.previous_epoch_head_attesting_gwei', index=9,
- number=10, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4087,
- serialized_end=4486,
-)
-
-
-_VALIDATORINFO = _descriptor.Descriptor(
- name='ValidatorInfo',
- full_name='ethereum.eth.v1alpha1.ValidatorInfo',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='public_key', full_name='ethereum.eth.v1alpha1.ValidatorInfo.public_key', index=0,
- number=1, type=12, cpp_type=9, label=1,
- has_default_value=False, default_value=b"",
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='index', full_name='ethereum.eth.v1alpha1.ValidatorInfo.index', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\0302github.com/prysmaticlabs/eth2-types.ValidatorIndex', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='epoch', full_name='ethereum.eth.v1alpha1.ValidatorInfo.epoch', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=b'\202\265\030)github.com/prysmaticlabs/eth2-types.Epoch', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='status', full_name='ethereum.eth.v1alpha1.ValidatorInfo.status', index=3,
- number=4, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='transition_timestamp', full_name='ethereum.eth.v1alpha1.ValidatorInfo.transition_timestamp', index=4,
- number=5, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='balance', full_name='ethereum.eth.v1alpha1.ValidatorInfo.balance', index=5,
- number=6, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='effective_balance', full_name='ethereum.eth.v1alpha1.ValidatorInfo.effective_balance', index=6,
- number=7, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto3',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=4489,
- serialized_end=4787,
-)
-
-_VALIDATORACTIVATIONRESPONSE_STATUS.fields_by_name['status'].message_type = _VALIDATORSTATUSRESPONSE
-_VALIDATORACTIVATIONRESPONSE_STATUS.containing_type = _VALIDATORACTIVATIONRESPONSE
-_VALIDATORACTIVATIONRESPONSE.fields_by_name['statuses'].message_type = _VALIDATORACTIVATIONRESPONSE_STATUS
-_VALIDATORSTATUSRESPONSE.fields_by_name['status'].enum_type = _VALIDATORSTATUS
-_MULTIPLEVALIDATORSTATUSRESPONSE.fields_by_name['statuses'].message_type = _VALIDATORSTATUSRESPONSE
-_DUTIESRESPONSE_DUTY.fields_by_name['status'].enum_type = _VALIDATORSTATUS
-_DUTIESRESPONSE_DUTY.containing_type = _DUTIESRESPONSE
-_DUTIESRESPONSE.fields_by_name['duties'].message_type = _DUTIESRESPONSE_DUTY
-_DUTIESRESPONSE.fields_by_name['current_epoch_duties'].message_type = _DUTIESRESPONSE_DUTY
-_DUTIESRESPONSE.fields_by_name['next_epoch_duties'].message_type = _DUTIESRESPONSE_DUTY
-_AGGREGATESELECTIONRESPONSE.fields_by_name['aggregate_and_proof'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._AGGREGATEATTESTATIONANDPROOF
-_SIGNEDAGGREGATESUBMITREQUEST.fields_by_name['signed_aggregate_and_proof'].message_type = eth_dot_v1alpha1_dot_attestation__pb2._SIGNEDAGGREGATEATTESTATIONANDPROOF
-_VALIDATORINFO.fields_by_name['status'].enum_type = _VALIDATORSTATUS
-DESCRIPTOR.message_types_by_name['DomainRequest'] = _DOMAINREQUEST
-DESCRIPTOR.message_types_by_name['DomainResponse'] = _DOMAINRESPONSE
-DESCRIPTOR.message_types_by_name['ValidatorActivationRequest'] = _VALIDATORACTIVATIONREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorActivationResponse'] = _VALIDATORACTIVATIONRESPONSE
-DESCRIPTOR.message_types_by_name['ChainStartResponse'] = _CHAINSTARTRESPONSE
-DESCRIPTOR.message_types_by_name['SyncedResponse'] = _SYNCEDRESPONSE
-DESCRIPTOR.message_types_by_name['ValidatorIndexRequest'] = _VALIDATORINDEXREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorIndexResponse'] = _VALIDATORINDEXRESPONSE
-DESCRIPTOR.message_types_by_name['ValidatorStatusRequest'] = _VALIDATORSTATUSREQUEST
-DESCRIPTOR.message_types_by_name['ValidatorStatusResponse'] = _VALIDATORSTATUSRESPONSE
-DESCRIPTOR.message_types_by_name['MultipleValidatorStatusRequest'] = _MULTIPLEVALIDATORSTATUSREQUEST
-DESCRIPTOR.message_types_by_name['MultipleValidatorStatusResponse'] = _MULTIPLEVALIDATORSTATUSRESPONSE
-DESCRIPTOR.message_types_by_name['DutiesRequest'] = _DUTIESREQUEST
-DESCRIPTOR.message_types_by_name['DutiesResponse'] = _DUTIESRESPONSE
-DESCRIPTOR.message_types_by_name['BlockRequest'] = _BLOCKREQUEST
-DESCRIPTOR.message_types_by_name['ProposeResponse'] = _PROPOSERESPONSE
-DESCRIPTOR.message_types_by_name['ProposeExitResponse'] = _PROPOSEEXITRESPONSE
-DESCRIPTOR.message_types_by_name['AttestationDataRequest'] = _ATTESTATIONDATAREQUEST
-DESCRIPTOR.message_types_by_name['AttestResponse'] = _ATTESTRESPONSE
-DESCRIPTOR.message_types_by_name['AggregateSelectionRequest'] = _AGGREGATESELECTIONREQUEST
-DESCRIPTOR.message_types_by_name['AggregateSelectionResponse'] = _AGGREGATESELECTIONRESPONSE
-DESCRIPTOR.message_types_by_name['SignedAggregateSubmitRequest'] = _SIGNEDAGGREGATESUBMITREQUEST
-DESCRIPTOR.message_types_by_name['SignedAggregateSubmitResponse'] = _SIGNEDAGGREGATESUBMITRESPONSE
-DESCRIPTOR.message_types_by_name['CommitteeSubnetsSubscribeRequest'] = _COMMITTEESUBNETSSUBSCRIBEREQUEST
-DESCRIPTOR.message_types_by_name['Validator'] = _VALIDATOR
-DESCRIPTOR.message_types_by_name['ValidatorParticipation'] = _VALIDATORPARTICIPATION
-DESCRIPTOR.message_types_by_name['ValidatorInfo'] = _VALIDATORINFO
-DESCRIPTOR.enum_types_by_name['ValidatorStatus'] = _VALIDATORSTATUS
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-DomainRequest = _reflection.GeneratedProtocolMessageType('DomainRequest', (_message.Message,), {
- 'DESCRIPTOR' : _DOMAINREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.DomainRequest)
- })
-_sym_db.RegisterMessage(DomainRequest)
-
-DomainResponse = _reflection.GeneratedProtocolMessageType('DomainResponse', (_message.Message,), {
- 'DESCRIPTOR' : _DOMAINRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.DomainResponse)
- })
-_sym_db.RegisterMessage(DomainResponse)
-
-ValidatorActivationRequest = _reflection.GeneratedProtocolMessageType('ValidatorActivationRequest', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORACTIVATIONREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorActivationRequest)
- })
-_sym_db.RegisterMessage(ValidatorActivationRequest)
-
-ValidatorActivationResponse = _reflection.GeneratedProtocolMessageType('ValidatorActivationResponse', (_message.Message,), {
-
- 'Status' : _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORACTIVATIONRESPONSE_STATUS,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorActivationResponse.Status)
- })
- ,
- 'DESCRIPTOR' : _VALIDATORACTIVATIONRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorActivationResponse)
- })
-_sym_db.RegisterMessage(ValidatorActivationResponse)
-_sym_db.RegisterMessage(ValidatorActivationResponse.Status)
-
-ChainStartResponse = _reflection.GeneratedProtocolMessageType('ChainStartResponse', (_message.Message,), {
- 'DESCRIPTOR' : _CHAINSTARTRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ChainStartResponse)
- })
-_sym_db.RegisterMessage(ChainStartResponse)
-
-SyncedResponse = _reflection.GeneratedProtocolMessageType('SyncedResponse', (_message.Message,), {
- 'DESCRIPTOR' : _SYNCEDRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SyncedResponse)
- })
-_sym_db.RegisterMessage(SyncedResponse)
-
-ValidatorIndexRequest = _reflection.GeneratedProtocolMessageType('ValidatorIndexRequest', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORINDEXREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorIndexRequest)
- })
-_sym_db.RegisterMessage(ValidatorIndexRequest)
-
-ValidatorIndexResponse = _reflection.GeneratedProtocolMessageType('ValidatorIndexResponse', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORINDEXRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorIndexResponse)
- })
-_sym_db.RegisterMessage(ValidatorIndexResponse)
-
-ValidatorStatusRequest = _reflection.GeneratedProtocolMessageType('ValidatorStatusRequest', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORSTATUSREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorStatusRequest)
- })
-_sym_db.RegisterMessage(ValidatorStatusRequest)
-
-ValidatorStatusResponse = _reflection.GeneratedProtocolMessageType('ValidatorStatusResponse', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORSTATUSRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorStatusResponse)
- })
-_sym_db.RegisterMessage(ValidatorStatusResponse)
-
-MultipleValidatorStatusRequest = _reflection.GeneratedProtocolMessageType('MultipleValidatorStatusRequest', (_message.Message,), {
- 'DESCRIPTOR' : _MULTIPLEVALIDATORSTATUSREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.MultipleValidatorStatusRequest)
- })
-_sym_db.RegisterMessage(MultipleValidatorStatusRequest)
-
-MultipleValidatorStatusResponse = _reflection.GeneratedProtocolMessageType('MultipleValidatorStatusResponse', (_message.Message,), {
- 'DESCRIPTOR' : _MULTIPLEVALIDATORSTATUSRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.MultipleValidatorStatusResponse)
- })
-_sym_db.RegisterMessage(MultipleValidatorStatusResponse)
-
-DutiesRequest = _reflection.GeneratedProtocolMessageType('DutiesRequest', (_message.Message,), {
- 'DESCRIPTOR' : _DUTIESREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.DutiesRequest)
- })
-_sym_db.RegisterMessage(DutiesRequest)
-
-DutiesResponse = _reflection.GeneratedProtocolMessageType('DutiesResponse', (_message.Message,), {
-
- 'Duty' : _reflection.GeneratedProtocolMessageType('Duty', (_message.Message,), {
- 'DESCRIPTOR' : _DUTIESRESPONSE_DUTY,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.DutiesResponse.Duty)
- })
- ,
- 'DESCRIPTOR' : _DUTIESRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.DutiesResponse)
- })
-_sym_db.RegisterMessage(DutiesResponse)
-_sym_db.RegisterMessage(DutiesResponse.Duty)
-
-BlockRequest = _reflection.GeneratedProtocolMessageType('BlockRequest', (_message.Message,), {
- 'DESCRIPTOR' : _BLOCKREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.BlockRequest)
- })
-_sym_db.RegisterMessage(BlockRequest)
-
-ProposeResponse = _reflection.GeneratedProtocolMessageType('ProposeResponse', (_message.Message,), {
- 'DESCRIPTOR' : _PROPOSERESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ProposeResponse)
- })
-_sym_db.RegisterMessage(ProposeResponse)
-
-ProposeExitResponse = _reflection.GeneratedProtocolMessageType('ProposeExitResponse', (_message.Message,), {
- 'DESCRIPTOR' : _PROPOSEEXITRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ProposeExitResponse)
- })
-_sym_db.RegisterMessage(ProposeExitResponse)
-
-AttestationDataRequest = _reflection.GeneratedProtocolMessageType('AttestationDataRequest', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTATIONDATAREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttestationDataRequest)
- })
-_sym_db.RegisterMessage(AttestationDataRequest)
-
-AttestResponse = _reflection.GeneratedProtocolMessageType('AttestResponse', (_message.Message,), {
- 'DESCRIPTOR' : _ATTESTRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AttestResponse)
- })
-_sym_db.RegisterMessage(AttestResponse)
-
-AggregateSelectionRequest = _reflection.GeneratedProtocolMessageType('AggregateSelectionRequest', (_message.Message,), {
- 'DESCRIPTOR' : _AGGREGATESELECTIONREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AggregateSelectionRequest)
- })
-_sym_db.RegisterMessage(AggregateSelectionRequest)
-
-AggregateSelectionResponse = _reflection.GeneratedProtocolMessageType('AggregateSelectionResponse', (_message.Message,), {
- 'DESCRIPTOR' : _AGGREGATESELECTIONRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.AggregateSelectionResponse)
- })
-_sym_db.RegisterMessage(AggregateSelectionResponse)
-
-SignedAggregateSubmitRequest = _reflection.GeneratedProtocolMessageType('SignedAggregateSubmitRequest', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDAGGREGATESUBMITREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedAggregateSubmitRequest)
- })
-_sym_db.RegisterMessage(SignedAggregateSubmitRequest)
-
-SignedAggregateSubmitResponse = _reflection.GeneratedProtocolMessageType('SignedAggregateSubmitResponse', (_message.Message,), {
- 'DESCRIPTOR' : _SIGNEDAGGREGATESUBMITRESPONSE,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.SignedAggregateSubmitResponse)
- })
-_sym_db.RegisterMessage(SignedAggregateSubmitResponse)
-
-CommitteeSubnetsSubscribeRequest = _reflection.GeneratedProtocolMessageType('CommitteeSubnetsSubscribeRequest', (_message.Message,), {
- 'DESCRIPTOR' : _COMMITTEESUBNETSSUBSCRIBEREQUEST,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.CommitteeSubnetsSubscribeRequest)
- })
-_sym_db.RegisterMessage(CommitteeSubnetsSubscribeRequest)
-
-Validator = _reflection.GeneratedProtocolMessageType('Validator', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATOR,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.Validator)
- })
-_sym_db.RegisterMessage(Validator)
-
-ValidatorParticipation = _reflection.GeneratedProtocolMessageType('ValidatorParticipation', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORPARTICIPATION,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorParticipation)
- })
-_sym_db.RegisterMessage(ValidatorParticipation)
-
-ValidatorInfo = _reflection.GeneratedProtocolMessageType('ValidatorInfo', (_message.Message,), {
- 'DESCRIPTOR' : _VALIDATORINFO,
- '__module__' : 'eth.v1alpha1.validator_pb2'
- # @@protoc_insertion_point(class_scope:ethereum.eth.v1alpha1.ValidatorInfo)
- })
-_sym_db.RegisterMessage(ValidatorInfo)
-
-
-DESCRIPTOR._options = None
-_DOMAINREQUEST.fields_by_name['epoch']._options = None
-_VALIDATORACTIVATIONREQUEST.fields_by_name['public_keys']._options = None
-_VALIDATORACTIVATIONRESPONSE_STATUS.fields_by_name['index']._options = None
-_CHAINSTARTRESPONSE.fields_by_name['genesis_validators_root']._options = None
-_VALIDATORINDEXREQUEST.fields_by_name['public_key']._options = None
-_VALIDATORINDEXRESPONSE.fields_by_name['index']._options = None
-_VALIDATORSTATUSREQUEST.fields_by_name['public_key']._options = None
-_VALIDATORSTATUSRESPONSE.fields_by_name['deposit_inclusion_slot']._options = None
-_VALIDATORSTATUSRESPONSE.fields_by_name['activation_epoch']._options = None
-_MULTIPLEVALIDATORSTATUSREQUEST.fields_by_name['public_keys']._options = None
-_MULTIPLEVALIDATORSTATUSRESPONSE.fields_by_name['public_keys']._options = None
-_MULTIPLEVALIDATORSTATUSRESPONSE.fields_by_name['indices']._options = None
-_DUTIESREQUEST.fields_by_name['epoch']._options = None
-_DUTIESREQUEST.fields_by_name['public_keys']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['committee']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['committee_index']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['attester_slot']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['proposer_slots']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['public_key']._options = None
-_DUTIESRESPONSE_DUTY.fields_by_name['validator_index']._options = None
-_DUTIESRESPONSE.fields_by_name['duties']._options = None
-_BLOCKREQUEST.fields_by_name['slot']._options = None
-_BLOCKREQUEST.fields_by_name['randao_reveal']._options = None
-_BLOCKREQUEST.fields_by_name['graffiti']._options = None
-_PROPOSERESPONSE.fields_by_name['block_root']._options = None
-_PROPOSEEXITRESPONSE.fields_by_name['exit_root']._options = None
-_ATTESTATIONDATAREQUEST.fields_by_name['slot']._options = None
-_ATTESTATIONDATAREQUEST.fields_by_name['committee_index']._options = None
-_ATTESTRESPONSE.fields_by_name['attestation_data_root']._options = None
-_AGGREGATESELECTIONREQUEST.fields_by_name['slot']._options = None
-_AGGREGATESELECTIONREQUEST.fields_by_name['committee_index']._options = None
-_AGGREGATESELECTIONREQUEST.fields_by_name['public_key']._options = None
-_AGGREGATESELECTIONREQUEST.fields_by_name['slot_signature']._options = None
-_SIGNEDAGGREGATESUBMITRESPONSE.fields_by_name['attestation_data_root']._options = None
-_COMMITTEESUBNETSSUBSCRIBEREQUEST.fields_by_name['slots']._options = None
-_COMMITTEESUBNETSSUBSCRIBEREQUEST.fields_by_name['committee_ids']._options = None
-_VALIDATOR.fields_by_name['public_key']._options = None
-_VALIDATOR.fields_by_name['withdrawal_credentials']._options = None
-_VALIDATOR.fields_by_name['activation_eligibility_epoch']._options = None
-_VALIDATOR.fields_by_name['activation_epoch']._options = None
-_VALIDATOR.fields_by_name['exit_epoch']._options = None
-_VALIDATOR.fields_by_name['withdrawable_epoch']._options = None
-_VALIDATORPARTICIPATION.fields_by_name['global_participation_rate']._options = None
-_VALIDATORPARTICIPATION.fields_by_name['voted_ether']._options = None
-_VALIDATORPARTICIPATION.fields_by_name['eligible_ether']._options = None
-_VALIDATORINFO.fields_by_name['index']._options = None
-_VALIDATORINFO.fields_by_name['epoch']._options = None
-
-_BEACONNODEVALIDATOR = _descriptor.ServiceDescriptor(
- name='BeaconNodeValidator',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator',
- file=DESCRIPTOR,
- index=0,
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_start=4947,
- serialized_end=7433,
- methods=[
- _descriptor.MethodDescriptor(
- name='GetDuties',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.GetDuties',
- index=0,
- containing_service=None,
- input_type=_DUTIESREQUEST,
- output_type=_DUTIESRESPONSE,
- serialized_options=b'\202\323\344\223\002 \022\036/eth/v1alpha1/validator/duties',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='StreamDuties',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.StreamDuties',
- index=1,
- containing_service=None,
- input_type=_DUTIESREQUEST,
- output_type=_DUTIESRESPONSE,
- serialized_options=b'\202\323\344\223\002\'\022%/eth/v1alpha1/validator/duties/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='DomainData',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.DomainData',
- index=2,
- containing_service=None,
- input_type=_DOMAINREQUEST,
- output_type=_DOMAINRESPONSE,
- serialized_options=b'\202\323\344\223\002 \022\036/eth/v1alpha1/validator/domain',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='WaitForChainStart',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForChainStart',
- index=3,
- containing_service=None,
- input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- output_type=_CHAINSTARTRESPONSE,
- serialized_options=b'\210\002\001\202\323\344\223\002+\022)/eth/v1alpha1/validator/chainstart/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='WaitForActivation',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.WaitForActivation',
- index=4,
- containing_service=None,
- input_type=_VALIDATORACTIVATIONREQUEST,
- output_type=_VALIDATORACTIVATIONRESPONSE,
- serialized_options=b'\202\323\344\223\002+\022)/eth/v1alpha1/validator/activation/stream',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ValidatorIndex',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorIndex',
- index=5,
- containing_service=None,
- input_type=_VALIDATORINDEXREQUEST,
- output_type=_VALIDATORINDEXRESPONSE,
- serialized_options=b'\202\323\344\223\002\037\022\035/eth/v1alpha1/validator/index',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ValidatorStatus',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.ValidatorStatus',
- index=6,
- containing_service=None,
- input_type=_VALIDATORSTATUSREQUEST,
- output_type=_VALIDATORSTATUSRESPONSE,
- serialized_options=b'\202\323\344\223\002 \022\036/eth/v1alpha1/validator/status',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='MultipleValidatorStatus',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.MultipleValidatorStatus',
- index=7,
- containing_service=None,
- input_type=_MULTIPLEVALIDATORSTATUSREQUEST,
- output_type=_MULTIPLEVALIDATORSTATUSRESPONSE,
- serialized_options=b'\202\323\344\223\002\"\022 /eth/v1alpha1/validator/statuses',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetBlock',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.GetBlock',
- index=8,
- containing_service=None,
- input_type=_BLOCKREQUEST,
- output_type=eth_dot_v1alpha1_dot_beacon__block__pb2._BEACONBLOCK,
- serialized_options=b'\202\323\344\223\002\037\022\035/eth/v1alpha1/validator/block',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ProposeBlock',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeBlock',
- index=9,
- containing_service=None,
- input_type=eth_dot_v1alpha1_dot_beacon__block__pb2._SIGNEDBEACONBLOCK,
- output_type=_PROPOSERESPONSE,
- serialized_options=b'\202\323\344\223\002\"\"\035/eth/v1alpha1/validator/block:\001*',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='GetAttestationData',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.GetAttestationData',
- index=10,
- containing_service=None,
- input_type=_ATTESTATIONDATAREQUEST,
- output_type=eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATIONDATA,
- serialized_options=b'\202\323\344\223\002%\022#/eth/v1alpha1/validator/attestation',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ProposeAttestation',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeAttestation',
- index=11,
- containing_service=None,
- input_type=eth_dot_v1alpha1_dot_attestation__pb2._ATTESTATION,
- output_type=_ATTESTRESPONSE,
- serialized_options=b'\202\323\344\223\002(\"#/eth/v1alpha1/validator/attestation:\001*',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SubmitAggregateSelectionProof',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitAggregateSelectionProof',
- index=12,
- containing_service=None,
- input_type=_AGGREGATESELECTIONREQUEST,
- output_type=_AGGREGATESELECTIONRESPONSE,
- serialized_options=b'\202\323\344\223\002&\"!/eth/v1alpha1/validator/aggregate:\001*',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SubmitSignedAggregateSelectionProof',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.SubmitSignedAggregateSelectionProof',
- index=13,
- containing_service=None,
- input_type=_SIGNEDAGGREGATESUBMITREQUEST,
- output_type=_SIGNEDAGGREGATESUBMITRESPONSE,
- serialized_options=b'\202\323\344\223\002&\"!/eth/v1alpha1/validator/aggregate:\001*',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='ProposeExit',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.ProposeExit',
- index=14,
- containing_service=None,
- input_type=eth_dot_v1alpha1_dot_beacon__block__pb2._SIGNEDVOLUNTARYEXIT,
- output_type=_PROPOSEEXITRESPONSE,
- serialized_options=b'\202\323\344\223\002!\"\034/eth/v1alpha1/validator/exit:\001*',
- create_key=_descriptor._internal_create_key,
- ),
- _descriptor.MethodDescriptor(
- name='SubscribeCommitteeSubnets',
- full_name='ethereum.eth.v1alpha1.BeaconNodeValidator.SubscribeCommitteeSubnets',
- index=15,
- containing_service=None,
- input_type=_COMMITTEESUBNETSSUBSCRIBEREQUEST,
- output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
- serialized_options=b'\202\323\344\223\002-\"(/eth/v1alpha1/validator/subnet/subscribe:\001*',
- create_key=_descriptor._internal_create_key,
- ),
-])
-_sym_db.RegisterServiceDescriptor(_BEACONNODEVALIDATOR)
-
-DESCRIPTOR.services_by_name['BeaconNodeValidator'] = _BEACONNODEVALIDATOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/proto/eth/v1alpha1/validator_pb2_grpc.py b/proto/eth/v1alpha1/validator_pb2_grpc.py
deleted file mode 100644
index 62b58ad..0000000
--- a/proto/eth/v1alpha1/validator_pb2_grpc.py
+++ /dev/null
@@ -1,659 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from eth.v1alpha1 import attestation_pb2 as eth_dot_v1alpha1_dot_attestation__pb2
-from eth.v1alpha1 import beacon_block_pb2 as eth_dot_v1alpha1_dot_beacon__block__pb2
-from eth.v1alpha1 import validator_pb2 as eth_dot_v1alpha1_dot_validator__pb2
-from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
-
-
-class BeaconNodeValidatorStub(object):
- """Beacon node validator API
-
- The beacon node validator API enables a validator to connect
- and perform its obligations on the Ethereum 2.0 phase 0 beacon chain.
- """
-
- def __init__(self, channel):
- """Constructor.
-
- Args:
- channel: A grpc.Channel.
- """
- self.GetDuties = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetDuties',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.FromString,
- )
- self.StreamDuties = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/StreamDuties',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.FromString,
- )
- self.DomainData = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/DomainData',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.DomainRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DomainResponse.FromString,
- )
- self.WaitForChainStart = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/WaitForChainStart',
- request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ChainStartResponse.FromString,
- )
- self.WaitForActivation = channel.unary_stream(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/WaitForActivation',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationResponse.FromString,
- )
- self.ValidatorIndex = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/ValidatorIndex',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexResponse.FromString,
- )
- self.ValidatorStatus = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/ValidatorStatus',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusResponse.FromString,
- )
- self.MultipleValidatorStatus = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/MultipleValidatorStatus',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusResponse.FromString,
- )
- self.GetBlock = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetBlock',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.BlockRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.BeaconBlock.FromString,
- )
- self.ProposeBlock = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeBlock',
- request_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ProposeResponse.FromString,
- )
- self.GetAttestationData = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetAttestationData',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.AttestationDataRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_attestation__pb2.AttestationData.FromString,
- )
- self.ProposeAttestation = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeAttestation',
- request_serializer=eth_dot_v1alpha1_dot_attestation__pb2.Attestation.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.AttestResponse.FromString,
- )
- self.SubmitAggregateSelectionProof = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitAggregateSelectionProof',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionResponse.FromString,
- )
- self.SubmitSignedAggregateSelectionProof = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitSignedAggregateSelectionProof',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitRequest.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitResponse.FromString,
- )
- self.ProposeExit = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeExit',
- request_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedVoluntaryExit.SerializeToString,
- response_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ProposeExitResponse.FromString,
- )
- self.SubscribeCommitteeSubnets = channel.unary_unary(
- '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubscribeCommitteeSubnets',
- request_serializer=eth_dot_v1alpha1_dot_validator__pb2.CommitteeSubnetsSubscribeRequest.SerializeToString,
- response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- )
-
-
-class BeaconNodeValidatorServicer(object):
- """Beacon node validator API
-
- The beacon node validator API enables a validator to connect
- and perform its obligations on the Ethereum 2.0 phase 0 beacon chain.
- """
-
- def GetDuties(self, request, context):
- """Retrieves validator duties for the requested validators.
-
- The duties consist of:
- Proposer - the validator that creates a beacon chain block.
- Attester — a validator that is part of a committee that needs to sign off on a beacon chain
- block while simultaneously creating a cross link to a recent shard block on a particular shard chain.
- The server returns a list of duties which are the actions should be performed by validators for a given epoch.
- Validator duties should be polled every epoch, but due to chain reorg of >MIN_SEED_LOOKAHEAD could occur,
- the validator duties could chain. For complete safety, it is recommended to poll at every slot to ensure
- validator is fully aware of any sudden chain reorg.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def StreamDuties(self, request, context):
- """Stream validator duties for the requested validators.
-
- The duties consist of:
- Proposer - the validator that creates a beacon chain block.
- Attester — a validator that is part of a committee that needs to sign off on a beacon chain
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def DomainData(self, request, context):
- """DomainData fetches the current BLS signature domain version information from the
- running beacon node's state. This information is used when validators sign
- blocks and attestations appropriately based on their duty.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def WaitForChainStart(self, request, context):
- """WaitForChainStart queries the logs of the Validator Deposit Contract on the Ethereum
- proof-of-work chain to verify the beacon chain has started its runtime and
- validators are ready to begin their responsibilities.
-
- If the chain has not yet started, this endpoint starts a server-side stream which updates
- the client when the beacon chain is ready.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def WaitForActivation(self, request, context):
- """WaitForActivation checks if a validator public key exists in the active validator
- registry of the current beacon state. If the validator is NOT yet active, it starts a
- server-side stream which updates the client whenever the validator becomes active in
- the beacon node's state.
-
- The input to this endpoint is a list of validator public keys, and the corresponding
- stream will respond until at least a single corresponding validator to those
- keys is activated.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ValidatorIndex(self, request, context):
- """ValidatorIndex retrieves a validator's index location in the beacon state's
- validator registry looking up whether the validator exists based on its
- public key. This method returns NOT_FOUND if no index is found for the public key
- specified in the request.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ValidatorStatus(self, request, context):
- """ValidatorStatus returns a validator's status based on the current epoch.
- The request can specify either a validator's public key or validator index.
-
- The status response can be one of the following:
- DEPOSITED - validator's deposit has been recognized by Ethereum 1, not yet recognized by Ethereum 2.
- PENDING - validator is in Ethereum 2's activation queue.
- ACTIVE - validator is active.
- EXITING - validator has initiated an an exit request, or has dropped below the ejection balance and is being kicked out.
- EXITED - validator is no longer validating.
- SLASHING - validator has been kicked out due to meeting a slashing condition.
- UNKNOWN_STATUS - validator does not have a known status in the network.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def MultipleValidatorStatus(self, request, context):
- """MultipleValidatorStatus returns a list of validator statuses on the current epoch.
- The request can specify a list of validator public keys.
-
- Returns a list of ValidatorStatusResponses.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetBlock(self, request, context):
- """Retrieves the latest valid beacon block to be proposed on the beacon chain.
-
- The server returns a new beacon block, without proposer signature, that can be
- proposed on the beacon chain. The block should be filled with all the necessary
- data for proposer to sign.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ProposeBlock(self, request, context):
- """Sends the newly signed beacon block to beacon node.
-
- The validator sends the newly signed beacon block to the beacon node so the beacon block can
- be included in the beacon chain. The beacon node is expected to validate and process the
- beacon block into its state.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def GetAttestationData(self, request, context):
- """Retrieves the latest valid attestation data to be attested on the beacon chain.
-
- The server returns the latest valid data which represents the correct vote
- for the head of the beacon chain,
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ProposeAttestation(self, request, context):
- """Sends the newly signed attestation to beacon node.
-
- The validator sends the newly signed attestation to the beacon node for the attestation to
- be included in the beacon chain. The beacon node is expected to validate and publish attestation on
- appropriate committee subnet.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SubmitAggregateSelectionProof(self, request, context):
- """Submit selection proof to the beacon node to aggregate all matching wire attestations with the same data root.
- the beacon node responses with an aggregate and proof object back to validator to sign over.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SubmitSignedAggregateSelectionProof(self, request, context):
- """Submit a signed aggregate and proof object, the beacon node will broadcast the
- signed aggregated attestation and proof object.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def ProposeExit(self, request, context):
- """Propose to leave the list of active validators.
-
- The beacon node is expected to validate the request and make it available for inclusion in
- the next proposed block.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
- def SubscribeCommitteeSubnets(self, request, context):
- """Subscribe to particular committee ID subnets given validator's duty.
-
- The beacon node is expected to subscribe to the committee ID subnet given by the request. With this,
- beacon node serving attesters can find persistent peers on the subnet to publish attestation,
- and beacon node serving aggregator can join the subnet.
- """
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
- context.set_details('Method not implemented!')
- raise NotImplementedError('Method not implemented!')
-
-
-def add_BeaconNodeValidatorServicer_to_server(servicer, server):
- rpc_method_handlers = {
- 'GetDuties': grpc.unary_unary_rpc_method_handler(
- servicer.GetDuties,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.SerializeToString,
- ),
- 'StreamDuties': grpc.unary_stream_rpc_method_handler(
- servicer.StreamDuties,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.SerializeToString,
- ),
- 'DomainData': grpc.unary_unary_rpc_method_handler(
- servicer.DomainData,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.DomainRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.DomainResponse.SerializeToString,
- ),
- 'WaitForChainStart': grpc.unary_stream_rpc_method_handler(
- servicer.WaitForChainStart,
- request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ChainStartResponse.SerializeToString,
- ),
- 'WaitForActivation': grpc.unary_stream_rpc_method_handler(
- servicer.WaitForActivation,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationResponse.SerializeToString,
- ),
- 'ValidatorIndex': grpc.unary_unary_rpc_method_handler(
- servicer.ValidatorIndex,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexResponse.SerializeToString,
- ),
- 'ValidatorStatus': grpc.unary_unary_rpc_method_handler(
- servicer.ValidatorStatus,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusResponse.SerializeToString,
- ),
- 'MultipleValidatorStatus': grpc.unary_unary_rpc_method_handler(
- servicer.MultipleValidatorStatus,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusResponse.SerializeToString,
- ),
- 'GetBlock': grpc.unary_unary_rpc_method_handler(
- servicer.GetBlock,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.BlockRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_beacon__block__pb2.BeaconBlock.SerializeToString,
- ),
- 'ProposeBlock': grpc.unary_unary_rpc_method_handler(
- servicer.ProposeBlock,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ProposeResponse.SerializeToString,
- ),
- 'GetAttestationData': grpc.unary_unary_rpc_method_handler(
- servicer.GetAttestationData,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.AttestationDataRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_attestation__pb2.AttestationData.SerializeToString,
- ),
- 'ProposeAttestation': grpc.unary_unary_rpc_method_handler(
- servicer.ProposeAttestation,
- request_deserializer=eth_dot_v1alpha1_dot_attestation__pb2.Attestation.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.AttestResponse.SerializeToString,
- ),
- 'SubmitAggregateSelectionProof': grpc.unary_unary_rpc_method_handler(
- servicer.SubmitAggregateSelectionProof,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionResponse.SerializeToString,
- ),
- 'SubmitSignedAggregateSelectionProof': grpc.unary_unary_rpc_method_handler(
- servicer.SubmitSignedAggregateSelectionProof,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitRequest.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitResponse.SerializeToString,
- ),
- 'ProposeExit': grpc.unary_unary_rpc_method_handler(
- servicer.ProposeExit,
- request_deserializer=eth_dot_v1alpha1_dot_beacon__block__pb2.SignedVoluntaryExit.FromString,
- response_serializer=eth_dot_v1alpha1_dot_validator__pb2.ProposeExitResponse.SerializeToString,
- ),
- 'SubscribeCommitteeSubnets': grpc.unary_unary_rpc_method_handler(
- servicer.SubscribeCommitteeSubnets,
- request_deserializer=eth_dot_v1alpha1_dot_validator__pb2.CommitteeSubnetsSubscribeRequest.FromString,
- response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- ),
- }
- generic_handler = grpc.method_handlers_generic_handler(
- 'ethereum.eth.v1alpha1.BeaconNodeValidator', rpc_method_handlers)
- server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class BeaconNodeValidator(object):
- """Beacon node validator API
-
- The beacon node validator API enables a validator to connect
- and perform its obligations on the Ethereum 2.0 phase 0 beacon chain.
- """
-
- @staticmethod
- def GetDuties(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetDuties',
- eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def StreamDuties(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/StreamDuties',
- eth_dot_v1alpha1_dot_validator__pb2.DutiesRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.DutiesResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def DomainData(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/DomainData',
- eth_dot_v1alpha1_dot_validator__pb2.DomainRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.DomainResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def WaitForChainStart(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/WaitForChainStart',
- google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ChainStartResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def WaitForActivation(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_stream(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/WaitForActivation',
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorActivationResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ValidatorIndex(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/ValidatorIndex',
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorIndexResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ValidatorStatus(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/ValidatorStatus',
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ValidatorStatusResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def MultipleValidatorStatus(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/MultipleValidatorStatus',
- eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.MultipleValidatorStatusResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetBlock(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetBlock',
- eth_dot_v1alpha1_dot_validator__pb2.BlockRequest.SerializeToString,
- eth_dot_v1alpha1_dot_beacon__block__pb2.BeaconBlock.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ProposeBlock(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeBlock',
- eth_dot_v1alpha1_dot_beacon__block__pb2.SignedBeaconBlock.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ProposeResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def GetAttestationData(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/GetAttestationData',
- eth_dot_v1alpha1_dot_validator__pb2.AttestationDataRequest.SerializeToString,
- eth_dot_v1alpha1_dot_attestation__pb2.AttestationData.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ProposeAttestation(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeAttestation',
- eth_dot_v1alpha1_dot_attestation__pb2.Attestation.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.AttestResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SubmitAggregateSelectionProof(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitAggregateSelectionProof',
- eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.AggregateSelectionResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SubmitSignedAggregateSelectionProof(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubmitSignedAggregateSelectionProof',
- eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitRequest.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.SignedAggregateSubmitResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def ProposeExit(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/ProposeExit',
- eth_dot_v1alpha1_dot_beacon__block__pb2.SignedVoluntaryExit.SerializeToString,
- eth_dot_v1alpha1_dot_validator__pb2.ProposeExitResponse.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
- @staticmethod
- def SubscribeCommitteeSubnets(request,
- target,
- options=(),
- channel_credentials=None,
- call_credentials=None,
- insecure=False,
- compression=None,
- wait_for_ready=None,
- timeout=None,
- metadata=None):
- return grpc.experimental.unary_unary(request, target, '/ethereum.eth.v1alpha1.BeaconNodeValidator/SubscribeCommitteeSubnets',
- eth_dot_v1alpha1_dot_validator__pb2.CommitteeSubnetsSubscribeRequest.SerializeToString,
- google_dot_protobuf_dot_empty__pb2.Empty.FromString,
- options, channel_credentials,
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..f6b98b7
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,50 @@
+[tool.poetry]
+name = "oracle"
+version = "2.0.0"
+description = "StakeWise Oracles are responsible for submitting off-chain data."
+authors = ["Dmitri Tsumak "]
+readme = "README.md"
+
+[tool.poetry.dependencies]
+python = "==3.8.11"
+python-decouple = "==3.4"
+web3 = "==5.23.1"
+py-ecc = "==5.2.0"
+tenacity = "==8.0.1"
+gql = {version = "3.0.0a6", allow-prereleases = true, extras = ["aiohttp"]}
+backoff = "==1.11.1"
+aiohttp = {version = "==3.7.4.post0", extras = ["speedups"]}
+
+[tool.poetry.dev-dependencies]
+mypy = "==0.910"
+black = "==21.9b0"
+flake8 = "==3.9.2"
+isort = "==5.9.3"
+flake8-black = "==0.2.3"
+flake8-bugbear = "==21.9.1"
+pre-commit = "==2.15.0"
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
+
+[tool.isort]
+profile = "black"
+
+[tool.black]
+line-length = 88
+include = '\.pyi?$'
+exclude = '''
+/(
+ \.eggs
+ | \.git
+ | \.hg
+ | \.mypy_cache
+ | \.tox
+ | \.venv
+ | _build
+ | buck-out
+ | build
+ | dist
+)/
+'''
diff --git a/requirements/ci.txt b/requirements/ci.txt
deleted file mode 100644
index a557207..0000000
--- a/requirements/ci.txt
+++ /dev/null
@@ -1,2 +0,0 @@
--r prod.txt
--r dev.txt
diff --git a/requirements/dev.in b/requirements/dev.in
index a1ee65a..e69de29 100644
--- a/requirements/dev.in
+++ b/requirements/dev.in
@@ -1,5 +0,0 @@
-pip-tools==6.1.0
-grpcio-tools==1.41.0
-black==20.8b1
-flake8==3.9.2
-mypy==0.812
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 90eacca..e69de29 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -1,293 +0,0 @@
-#
-# This file is autogenerated by pip-compile
-# To update, run:
-#
-# pip-compile --generate-hashes --output-file=requirements/dev.txt requirements/dev.in
-#
-appdirs==1.4.4 \
- --hash=sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41 \
- --hash=sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128
- # via black
-black==20.8b1 \
- --hash=sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea
- # via -r requirements/dev.in
-click==8.0.1 \
- --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \
- --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6
- # via
- # black
- # pip-tools
-flake8==3.9.2 \
- --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b \
- --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907
- # via -r requirements/dev.in
-grpcio-tools==1.41.0 \
- --hash=sha256:022ea466300fd8eee03375795c764b8d01aee7ba614c1d7ba198eef9eaebc07a \
- --hash=sha256:05730f1acd3fa70e63a62fe37377297774db7f4794fb6ae3e43f64aa354460f8 \
- --hash=sha256:08654c9f723fa644be52cc8f975c01bb93a99808ab02c2e64a20e9c9e92c9a3b \
- --hash=sha256:0d6489ed1310250f152d6170ee539e84bfc364bbfdffbbe98e8ce9297c4a1550 \
- --hash=sha256:17a759203f627b941086a65a0c3f39c5da41f11d11dc8ca5883e844c055876dd \
- --hash=sha256:2d48309bbbb2d7144117748718ca52eb60f10dd86a0cb8a0a5f952ee08575bee \
- --hash=sha256:3891b1df82369acbc8451d4952cd20755f49a82398dce62437511ad17b47290e \
- --hash=sha256:3c7f6c8559ac6bea6029b8c5d188d24509d30a28816de02c723659f56e862b98 \
- --hash=sha256:3f6c2bff12e2015bd69c600710fb427720446034ed9a237cd6edf7e2452cf826 \
- --hash=sha256:3f860f8a804f6ef6ea545483c1506d184f9bba40f635c6886d79791822c679e3 \
- --hash=sha256:4b48c13dbbf96d36a41e45fd011eeabc1541ec8705f2d533fa4c20634f750885 \
- --hash=sha256:50a9f66502e4868c20bc0b8c1c7d3b21e6b6b2578a7aef6ce7c28294b9eba911 \
- --hash=sha256:51bdc4bd088592d5f52b5cb6d3be072bf0d847a7af92e544f9885acdf5de1252 \
- --hash=sha256:55915c61baae316b607be6ff5be72614efc067e50dfffd389bde95c240a5416e \
- --hash=sha256:57f35fd71366f1eecd4c08b9d8eda1007d371827f092ae916b4235744e9175a6 \
- --hash=sha256:5b1edfcfa4f21c210bfe66534af9fa5ca37374bb0e0d1754018e0d92c8fe4c8e \
- --hash=sha256:5d15f5dd0c01f914ab15e921484b71aff0eff8aa123b22d76e71c76be8d81efc \
- --hash=sha256:5f52f7d8841372a047493ee9722810856a4adfa38330b4a688a1421dd3460518 \
- --hash=sha256:5f85be3053486cc53b41fe888957f61e98d6aab74b0726a54cf35e4a685f2b96 \
- --hash=sha256:602b7dd5e52924794f19f637ec042bc141b7d9dd127ddc662b28c42f8db08e95 \
- --hash=sha256:609f6e4cad800f0b2caa0b46baefbb30444bddfc94d1429b9add02d5e6759001 \
- --hash=sha256:6622feec0a3f326fb86cf01bf1bcbfec23548ae4d80706d88b296d792d816f0e \
- --hash=sha256:7145e9243718bd8a4792547efb1443846cebb3d36d49dca52d5f9edfb81aa256 \
- --hash=sha256:7242b39d16970319b11c13832f3474d09be53cbc88bc05c54140f5394a247184 \
- --hash=sha256:731c78b612ca672af0f4682e68d331d304a3eccd1836f0b89402c332aa653815 \
- --hash=sha256:7f3bf213d7b182628bdfb10854cc7b19d4882e1916786fc3a14f724555a7e824 \
- --hash=sha256:85b4cd4a77c27df984dce5b14eafa29c54abd134335230b59fa8d096c995b877 \
- --hash=sha256:898b032ddcd25a051c6c8892b76779b8821e073fc363e6105dc08efd95857bcd \
- --hash=sha256:8cf6ab58c14b7bd4cf5b4d652e2bfafc6543d38210d68332ccccff4733bcc615 \
- --hash=sha256:8f7cd5b8eeae570743cfd0ece36f62b32424b995ee3862697cfe94bc9c4fa5fe \
- --hash=sha256:98d9e581bc9ad154697af40c0109221926628d57fab2a52a1fa2cfed401349d5 \
- --hash=sha256:9ff9fdef6df6b3d1e4395158f4bd2bfab58867370bd4b4ed81a1a2ab20de085b \
- --hash=sha256:a111af9732c1ac85b35b894c4b6150127c52349ca220c0708d241d4bb8ee4622 \
- --hash=sha256:a1e2db4c90cb07d6b8f1526346df65da85dce995e7aa7c4db76bcc2a99dcbf43 \
- --hash=sha256:a4e08366f780b439499645fbb0b7788cccd978c06158b19e915726bfbe420031 \
- --hash=sha256:b78a3225302b60e59a922d909413b2c0de2ba19f4dc79273411dfad560e21418 \
- --hash=sha256:b8e9181327b94886f6214cfe2147721c6b60138c111d78313b9070f4068020b5 \
- --hash=sha256:c13b6a37fe3619be603265a14a614f86fa97a95934e6447de2bc9e66f9a35590 \
- --hash=sha256:c93137598d5f2b4d163aff571197be92d3c691a5d82dabb29b1ef467e3c29db6 \
- --hash=sha256:ceefaa88c066c9c779f15e8d58d57d3763efef3d0dbec483be99bc75ae0e2d70 \
- --hash=sha256:db64aa08ae500cb20c9f377e41a66e493c4cba27ab99710852340ef81c7d0e30 \
- --hash=sha256:dc65beee944735d4cb42c8c43e284ff711512d1f7a029bdbaeb0729243f3a702 \
- --hash=sha256:e1814b98a955aad08107eb4c4f068b1cd147cc923a2480bc2fae51007bb7866b \
- --hash=sha256:f4c03f312877e57b47beda2e9db5a39bc3af65ee22b38e85b4c0f94b3b9c26af
- # via -r requirements/dev.in
-grpcio==1.41.0 \
- --hash=sha256:056806e83eaa09d0af0e452dd353db8f7c90aa2dedcce1112a2d21592550f6b1 \
- --hash=sha256:07594e585a5ba25cf331ddb63095ca51010c34e328a822cb772ffbd5daa62cb5 \
- --hash=sha256:0abd56d90dff3ed566807520de1385126dded21e62d3490a34c180a91f94c1f4 \
- --hash=sha256:15c04d695833c739dbb25c88eaf6abd9a461ec0dbd32f44bc8769335a495cf5a \
- --hash=sha256:1820845e7e6410240eff97742e9f76cd5bf10ca01d36a322e86c0bd5340ac25b \
- --hash=sha256:1bcbeac764bbae329bc2cc9e95d0f4d3b0fb456b92cf12e7e06e3e860a4b31cf \
- --hash=sha256:2410000eb57cf76b05b37d2aee270b686f0a7876710850a2bba92b4ed133e026 \
- --hash=sha256:2882b62f74de8c8a4f7b2be066f6230ecc46f4edc8f42db1fb7358200abe3b25 \
- --hash=sha256:297ee755d3c6cd7e7d3770f298f4d4d4b000665943ae6d2888f7407418a9a510 \
- --hash=sha256:39ce785f0cbd07966a9019386b7a054615b2da63da3c7727f371304d000a1890 \
- --hash=sha256:3a92e4df5330cd384984e04804104ae34f521345917813aa86fc0930101a3697 \
- --hash=sha256:3bbeee115b05b22f6a9fa9bc78f9ab8d9d6bb8c16fdfc60401fc8658beae1099 \
- --hash=sha256:4537bb9e35af62c5189493792a8c34d127275a6d175c8ad48b6314cacba4021e \
- --hash=sha256:462178987f0e5c60d6d1b79e4e95803a4cd789db961d6b3f087245906bb5ae04 \
- --hash=sha256:5292a627b44b6d3065de4a364ead23bab3c9d7a7c05416a9de0c0624d0fe03f4 \
- --hash=sha256:5502832b7cec670a880764f51a335a19b10ff5ab2e940e1ded67f39b88aa02b1 \
- --hash=sha256:585847ed190ea9cb4d632eb0ebf58f1d299bbca5e03284bc3d0fa08bab6ea365 \
- --hash=sha256:59645b2d9f19b5ff30cb46ddbcaa09c398f9cd81e4e476b21c7c55ae1e942807 \
- --hash=sha256:5d4b30d068b022e412adcf9b14c0d9bcbc872e9745b91467edc0a4c700a8bba6 \
- --hash=sha256:7033199706526e7ee06a362e38476dfdf2ddbad625c19b67ed30411d1bb25a18 \
- --hash=sha256:7b07cbbd4eea56738e995fcbba3b60e41fd9aa9dac937fb7985c5dcbc7626260 \
- --hash=sha256:7da3f6f6b857399c9ad85bcbffc83189e547a0a1a777ab68f5385154f8bc1ed4 \
- --hash=sha256:83c1e731c2b76f26689ad88534cafefe105dcf385567bead08f5857cb308246b \
- --hash=sha256:9674a9d3f23702e35a89e22504f41b467893cf704f627cc9cdd118cf1dcc8e26 \
- --hash=sha256:9ecd0fc34aa46eeac24f4d20e67bafaf72ca914f99690bf2898674905eaddaf9 \
- --hash=sha256:a0c4bdd1d646365d10ba1468bcf234ea5ad46e8ce2b115983e8563248614910a \
- --hash=sha256:a144f6cecbb61aace12e5920840338a3d246123a41d795e316e2792e9775ad15 \
- --hash=sha256:a3cd7f945d3e3b82ebd2a4c9862eb9891a5ac87f84a7db336acbeafd86e6c402 \
- --hash=sha256:a614224719579044bd7950554d3b4c1793bb5715cbf0f0399b1f21d283c40ef6 \
- --hash=sha256:ace080a9c3c673c42adfd2116875a63fec9613797be01a6105acf7721ed0c693 \
- --hash=sha256:b2de4e7b5a930be04a4d05c9f5fce7e9191217ccdc174b026c2a7928770dca9f \
- --hash=sha256:b6b68c444abbaf4a2b944a61cf35726ab9645f45d416bcc7cf4addc4b2f2d53d \
- --hash=sha256:be3c6ac822edb509aeef41361ca9c8c5ee52cb9e4973e1977d2bb7d6a460fd97 \
- --hash=sha256:c07acd49541f5f6f9984fe0adf162d77bf70e0f58e77f9960c6f571314ff63a4 \
- --hash=sha256:c1e0a4c86d4cbd93059d5eeceed6e1c2e3e1494e1bf40be9b8ab14302c576162 \
- --hash=sha256:c8c5bc498f6506b6041c30afb7a55c57a9fd535d1a0ac7cdba9b5fd791a85633 \
- --hash=sha256:c95dd6e60e059ff770a2ac9f5a202b75dd64d76b0cd0c48f27d58907e43ed6a6 \
- --hash=sha256:ccd2f1cf11768d1f6fbe4e13e8b8fb0ccfe9914ceeff55a367d5571e82eeb543 \
- --hash=sha256:d0cc0393744ce3ce1b237ae773635cc928470ff46fb0d3f677e337a38e5ed4f6 \
- --hash=sha256:d539ebd05a2bbfbf897d41738d37d162d5c3d9f2b1f8ddf2c4f75e2c9cf59907 \
- --hash=sha256:d71aa430b2ac40e18e388504ac34cc91d49d811855ca507c463a21059bf364f0 \
- --hash=sha256:dcb5f324712a104aca4a459e524e535f205f36deb8005feb4f9d3ff0a22b5177 \
- --hash=sha256:e516124010ef60d5fc2e0de0f1f987599249dc55fd529001f17f776a4145767f \
- --hash=sha256:fb64abf0d92134cb0ba4496a3b7ab918588eee42de20e5b3507fe6ee16db97ee
- # via grpcio-tools
-mccabe==0.6.1 \
- --hash=sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42 \
- --hash=sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f
- # via flake8
-mypy-extensions==0.4.3 \
- --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
- --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
- # via
- # black
- # mypy
-mypy==0.812 \
- --hash=sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e \
- --hash=sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064 \
- --hash=sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c \
- --hash=sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4 \
- --hash=sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97 \
- --hash=sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df \
- --hash=sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8 \
- --hash=sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a \
- --hash=sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56 \
- --hash=sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7 \
- --hash=sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6 \
- --hash=sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5 \
- --hash=sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a \
- --hash=sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521 \
- --hash=sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564 \
- --hash=sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49 \
- --hash=sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66 \
- --hash=sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a \
- --hash=sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119 \
- --hash=sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506 \
- --hash=sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c \
- --hash=sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb
- # via -r requirements/dev.in
-pathspec==0.9.0 \
- --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \
- --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1
- # via black
-pep517==0.11.0 \
- --hash=sha256:3fa6b85b9def7ba4de99fb7f96fe3f02e2d630df8aa2720a5cf3b183f087a738 \
- --hash=sha256:e1ba5dffa3a131387979a68ff3e391ac7d645be409216b961bc2efe6468ab0b2
- # via pip-tools
-pip-tools==6.1.0 \
- --hash=sha256:197e3f8839095ccec3ad1ef410e0804c07d9f17dff1c340fb417ca2b63feacc9 \
- --hash=sha256:400bf77e29cca48c31abc210042932bb52dcc138ef4ea4d52c5db429aa8ae6ee
- # via -r requirements/dev.in
-protobuf==3.18.0 \
- --hash=sha256:0a59ea8da307118372750e2fdfe0961622e675b8dd35e05c42384d618189a938 \
- --hash=sha256:17181fc0814655812aac108e755bd5185d71aa8d81bd241cec6e232c84097918 \
- --hash=sha256:18b308946a592e245299391e53c01b5b8efc2794f49986e80f37d7b5e60a270f \
- --hash=sha256:1f3ecec3038c2fb4dad952d3d6cb9ca301999903a09e43794fb348da48f7577f \
- --hash=sha256:3b5b81bb665aac548b413480f4e0d8c38a74bc4dea57835f288a3ce74f63dfe9 \
- --hash=sha256:42c04e66ec5a38ad2171639dc9860c2f9594668f709ea3a4a192acf7346853a7 \
- --hash=sha256:5201333b7aa711965c5769b250f8565a9924e8e27f8b622bbc5e6847aeaab1b1 \
- --hash=sha256:568c049ff002a7523ed33fb612e6b97da002bf87ffb619a1fc3eadf2257a3b31 \
- --hash=sha256:5730de255c95b3403eedd1a568eb28203b913b6192ff5a3fdc3ff30f37107a38 \
- --hash=sha256:615099e52e9fbc9fde00177267a94ca820ecf4e80093e390753568b7d8cb3c1a \
- --hash=sha256:7646c20605fbee57e77fdbc4a90175538281b152f46ba17019916593f8062c2a \
- --hash=sha256:7e791a94db391ae22b3943fc88f6ba0e1f62b6ad58b33db7517df576c7834d23 \
- --hash=sha256:80b0a5157f3a53043daf8eb7cfa1220b27a5a63dd6655dbd8e1e6f7b5dcd6347 \
- --hash=sha256:877664b1b8d1e23553634f625e4e12aae4ff16cbbef473f8118c239d478f422a \
- --hash=sha256:9072cb18fca8998b77f969fb74d25a11d7f4a39a8b1ddc3cf76cd5abda8499cb \
- --hash=sha256:9147565f93e6699d7512747766598afe63205f226ac7b61f47954974c9aab852 \
- --hash=sha256:93c077fd83879cf48f327a2491c24da447a09da6a7ab3cc311a6f5a61fcb5de0 \
- --hash=sha256:d11465040cadcea8ecf5f0b131af5099a9696f9d0bef6f88148b372bacc1c52d \
- --hash=sha256:f589346b5b3f702c1d30e2343c9897e6c35e7bd495c10a0e17d11ecb5ee5bd06 \
- --hash=sha256:f6138462643adce0ed6e49007a63b7fd7dc4fda1ef4e15a70fcebe76c1407a71 \
- --hash=sha256:f7c8193ec805324ff6024242b00f64a24b94d56b895f62bf28a9d72a228d4fca
- # via grpcio-tools
-pycodestyle==2.7.0 \
- --hash=sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068 \
- --hash=sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef
- # via flake8
-pyflakes==2.3.1 \
- --hash=sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3 \
- --hash=sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db
- # via flake8
-regex==2021.9.30 \
- --hash=sha256:0de8ad66b08c3e673b61981b9e3626f8784d5564f8c3928e2ad408c0eb5ac38c \
- --hash=sha256:1f1125bc5172ab3a049bc6f4b9c0aae95a2a2001a77e6d6e4239fa3653e202b5 \
- --hash=sha256:255791523f80ea8e48e79af7120b4697ef3b74f6886995dcdb08c41f8e516be0 \
- --hash=sha256:28040e89a04b60d579c69095c509a4f6a1a5379cd865258e3a186b7105de72c6 \
- --hash=sha256:37868075eda024470bd0feab872c692ac4ee29db1e14baec103257bf6cc64346 \
- --hash=sha256:3b71213ec3bad9a5a02e049f2ec86b3d7c3e350129ae0f4e2f99c12b5da919ed \
- --hash=sha256:3be40f720af170a6b20ddd2ad7904c58b13d2b56f6734ee5d09bbdeed2fa4816 \
- --hash=sha256:42952d325439ef223e4e9db7ee6d9087b5c68c5c15b1f9de68e990837682fc7b \
- --hash=sha256:470f2c882f2672d8eeda8ab27992aec277c067d280b52541357e1acd7e606dae \
- --hash=sha256:4907fb0f9b9309a5bded72343e675a252c2589a41871874feace9a05a540241e \
- --hash=sha256:4d87459ad3ab40cd8493774f8a454b2e490d8e729e7e402a0625867a983e4e02 \
- --hash=sha256:4fa7ba9ab2eba7284e0d7d94f61df7af86015b0398e123331362270d71fab0b9 \
- --hash=sha256:5b34d2335d6aedec7dcadd3f8283b9682fadad8b9b008da8788d2fce76125ebe \
- --hash=sha256:6348a7ab2a502cbdd0b7fd0496d614007489adb7361956b38044d1d588e66e04 \
- --hash=sha256:638e98d069b14113e8afba6a54d1ca123f712c0d105e67c1f9211b2a825ef926 \
- --hash=sha256:66696c8336a1b5d1182464f3af3427cc760118f26d0b09a2ddc16a976a4d2637 \
- --hash=sha256:78cf6a1e023caf5e9a982f5377414e1aeac55198831b852835732cfd0a0ca5ff \
- --hash=sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7 \
- --hash=sha256:81fdc90f999b2147fc62e303440c424c47e5573a9b615ed5d43a5b832efcca9e \
- --hash=sha256:87e9c489aa98f50f367fb26cc9c8908d668e9228d327644d7aa568d47e456f47 \
- --hash=sha256:8c1ad61fa024195136a6b7b89538030bd00df15f90ac177ca278df9b2386c96f \
- --hash=sha256:9910869c472e5a6728680ca357b5846546cbbd2ab3ad5bef986ef0bc438d0aa6 \
- --hash=sha256:9925985be05d54b3d25fd6c1ea8e50ff1f7c2744c75bdc4d3b45c790afa2bcb3 \
- --hash=sha256:9a0b0db6b49da7fa37ca8eddf9f40a8dbc599bad43e64f452284f37b6c34d91c \
- --hash=sha256:9c065d95a514a06b92a5026766d72ac91bfabf581adb5b29bc5c91d4b3ee9b83 \
- --hash=sha256:a6f08187136f11e430638c2c66e1db091105d7c2e9902489f0dbc69b44c222b4 \
- --hash=sha256:ad0517df22a97f1da20d8f1c8cb71a5d1997fa383326b81f9cf22c9dadfbdf34 \
- --hash=sha256:b345ecde37c86dd7084c62954468a4a655fd2d24fd9b237949dd07a4d0dd6f4c \
- --hash=sha256:b55442650f541d195a535ccec33078c78a9521973fb960923da7515e9ed78fa6 \
- --hash=sha256:c2b180ed30856dfa70cfe927b0fd38e6b68198a03039abdbeb1f2029758d87e7 \
- --hash=sha256:c9e30838df7bfd20db6466fd309d9b580d32855f8e2c2e6d74cf9da27dcd9b63 \
- --hash=sha256:cae4099031d80703954c39680323dabd87a69b21262303160776aa0e55970ca0 \
- --hash=sha256:ce7b1cca6c23f19bee8dc40228d9c314d86d1e51996b86f924aca302fc8f8bf9 \
- --hash=sha256:d0861e7f6325e821d5c40514c551fd538b292f8cc3960086e73491b9c5d8291d \
- --hash=sha256:d331f238a7accfbbe1c4cd1ba610d4c087b206353539331e32a8f05345c74aec \
- --hash=sha256:e07049cece3462c626d650e8bf42ddbca3abf4aa08155002c28cb6d9a5a281e2 \
- --hash=sha256:e2cb7d4909ed16ed35729d38af585673f1f0833e73dfdf0c18e5be0061107b99 \
- --hash=sha256:e3770781353a4886b68ef10cec31c1f61e8e3a0be5f213c2bb15a86efd999bc4 \
- --hash=sha256:e502f8d4e5ef714bcc2c94d499684890c94239526d61fdf1096547db91ca6aa6 \
- --hash=sha256:e6f2d2f93001801296fe3ca86515eb04915472b5380d4d8752f09f25f0b9b0ed \
- --hash=sha256:f588209d3e4797882cd238195c175290dbc501973b10a581086b5c6bcd095ffb
- # via black
-six==1.16.0 \
- --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
- --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
- # via grpcio
-toml==0.10.2 \
- --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \
- --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f
- # via black
-tomli==1.2.1 \
- --hash=sha256:8dd0e9524d6f386271a36b41dbf6c57d8e32fd96fd22b6584679dc569d20899f \
- --hash=sha256:a5b75cb6f3968abb47af1b40c1819dc519ea82bcc065776a866e8d74c5ca9442
- # via pep517
-typed-ast==1.4.3 \
- --hash=sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace \
- --hash=sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff \
- --hash=sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266 \
- --hash=sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528 \
- --hash=sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6 \
- --hash=sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808 \
- --hash=sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4 \
- --hash=sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363 \
- --hash=sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341 \
- --hash=sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04 \
- --hash=sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41 \
- --hash=sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e \
- --hash=sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3 \
- --hash=sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899 \
- --hash=sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805 \
- --hash=sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c \
- --hash=sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c \
- --hash=sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39 \
- --hash=sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a \
- --hash=sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3 \
- --hash=sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7 \
- --hash=sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f \
- --hash=sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075 \
- --hash=sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0 \
- --hash=sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40 \
- --hash=sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428 \
- --hash=sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927 \
- --hash=sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3 \
- --hash=sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f \
- --hash=sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65
- # via
- # black
- # mypy
-typing-extensions==3.10.0.2 \
- --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \
- --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \
- --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34
- # via
- # black
- # mypy
-
-# WARNING: The following packages were not pinned, but pip requires them to be
-# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
-# pip
-# setuptools
diff --git a/requirements/prod.in b/requirements/prod.in
index 179f69a..e69de29 100644
--- a/requirements/prod.in
+++ b/requirements/prod.in
@@ -1,8 +0,0 @@
-notifiers==1.2.1
-web3==5.24.0
-grpcio==1.41.0
-protobuf===3.18.0
-google-api-core==1.27.0
-tenacity==7.0.0
-ipfshttpclient==0.8.0a2
-gql==2.0.0
diff --git a/requirements/prod.txt b/requirements/prod.txt
index b535d42..e69de29 100644
--- a/requirements/prod.txt
+++ b/requirements/prod.txt
@@ -1,560 +0,0 @@
-#
-# This file is autogenerated by pip-compile
-# To update, run:
-#
-# pip-compile --generate-hashes --output-file=requirements/prod.txt requirements/prod.in
-#
-aiohttp==3.7.4.post0 \
- --hash=sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe \
- --hash=sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe \
- --hash=sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5 \
- --hash=sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8 \
- --hash=sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd \
- --hash=sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb \
- --hash=sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c \
- --hash=sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87 \
- --hash=sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0 \
- --hash=sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290 \
- --hash=sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5 \
- --hash=sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287 \
- --hash=sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde \
- --hash=sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf \
- --hash=sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8 \
- --hash=sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16 \
- --hash=sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf \
- --hash=sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809 \
- --hash=sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213 \
- --hash=sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f \
- --hash=sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013 \
- --hash=sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b \
- --hash=sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9 \
- --hash=sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5 \
- --hash=sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb \
- --hash=sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df \
- --hash=sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4 \
- --hash=sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439 \
- --hash=sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f \
- --hash=sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22 \
- --hash=sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f \
- --hash=sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5 \
- --hash=sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970 \
- --hash=sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009 \
- --hash=sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc \
- --hash=sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a \
- --hash=sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95
- # via web3
-async-timeout==3.0.1 \
- --hash=sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f \
- --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3
- # via aiohttp
-attrs==21.2.0 \
- --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \
- --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb
- # via
- # aiohttp
- # jsonschema
-base58==2.1.0 \
- --hash=sha256:171a547b4a3c61e1ae3807224a6f7aec75e364c4395e7562649d7335768001a2 \
- --hash=sha256:8225891d501b68c843ffe30b86371f844a21c6ba00da76f52f9b998ba771fb48
- # via multiaddr
-bitarray==1.2.2 \
- --hash=sha256:27a69ffcee3b868abab3ce8b17c69e02b63e722d4d64ffd91d659f81e9984954
- # via eth-account
-cachetools==4.2.4 \
- --hash=sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693 \
- --hash=sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1
- # via google-auth
-certifi==2021.5.30 \
- --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \
- --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8
- # via requests
-chardet==4.0.0 \
- --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \
- --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5
- # via aiohttp
-charset-normalizer==2.0.6 \
- --hash=sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6 \
- --hash=sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f
- # via requests
-click==8.0.1 \
- --hash=sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a \
- --hash=sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6
- # via notifiers
-cytoolz==0.11.0 \
- --hash=sha256:140eaadcd86216d4a185db3a37396ee80dd2edc6e490ba37a3d7c1b17a124078 \
- --hash=sha256:2f9963114029e78ddb626140cbb15b79ad0fd1563484b73fb29403a3d5bf3ed4 \
- --hash=sha256:3159da30eaf214746215293fdba19b6b54af59b3b2ba979eb9e184c6c7a854d2 \
- --hash=sha256:477f71b8b2c6fdd97aa3a421ba0cfd04b22ffed1b22dda3fea06db2756ee7097 \
- --hash=sha256:5692a100d657f9bc2fede44ff41649c0c577f251bc0bd06c699c177235a0f81c \
- --hash=sha256:596a40ce920dd6cdab42d3dec5a4e8bb0bf258bb79426a4ed7658a27c214941b \
- --hash=sha256:6cba0572e3ad187e0ea0ddd20bb9c6aad794c23d997ed2b2aa2bbd109fe61f9f \
- --hash=sha256:84519cf4f63308b0ce39162b7a341367338953cd9fbf7edd335cbc44dcd321e9 \
- --hash=sha256:8893b54f8d8d1bbc5a22dc4989d9b3eb269dd5ee1247993158e1f9ae0fbb9c88 \
- --hash=sha256:a6e95de2fe891075f71edb0a56701eeaae04d43f44470c24d45e89f1ea801e85 \
- --hash=sha256:b4a3eb96eda360b14fa6c7d2ce6faf684319c051f9ea620b009cb28a2878ed32 \
- --hash=sha256:b61f23e9fa7cd5a87a503ab659f816858e2235926cd95b0c7e37403530d4a2d6 \
- --hash=sha256:c183237f4f0bac53238588e3567c0287130dd9ed6b6b880579a5cca960a89f54 \
- --hash=sha256:c50051c02b23823209d6b0e8f7b2b37371312da50ca78165871dc6fed7bd37df \
- --hash=sha256:c64f3590c3eb40e1548f0d3c6b2ccde70493d0b8dc6cc7f9f3fec0bb3dcd4222 \
- --hash=sha256:c65635ad93bac9002e36d42603bd87514e8ea932910158054b409ceee05ff4fe \
- --hash=sha256:c7ed490f7f5c069a5082b73803ff4595f12ed0eb6b52ffa5ffe15d532acb71ed \
- --hash=sha256:d0fdf0186201f882274db95fc5644ef34bfb0593d9db23b7343b0e6c8c000a0a \
- --hash=sha256:e2e7cbfec2681e8acfd0013e9581905f251455d411457a6f475ba1870d1685fc \
- --hash=sha256:f85a8e164ebbe75e77a9c8a0b91bd2a3ceb5beeb0f1c180affe75318a41df98c \
- --hash=sha256:fb1b6bb4dee54fe62306d7330639f57a0dbb612520516b97b1c9dea5bc506634
- # via
- # eth-keyfile
- # eth-utils
-eth-abi==2.1.1 \
- --hash=sha256:4bb1d87bb6605823379b07f6c02c8af45df01a27cc85bd6abb7cf1446ce7d188 \
- --hash=sha256:78df5d2758247a8f0766a7cfcea4575bcfe568c34a33e6d05a72c328a9040444
- # via
- # eth-account
- # web3
-eth-account==0.5.6 \
- --hash=sha256:baef80956e88af5643f8602e72aab6bcd91d8a9f71dd03c7a7f1145f5e6fd694 \
- --hash=sha256:d324daf5a40bd5bdaf5ddaebfec71e7440b21f9ae4989921ce1253d63f8fe436
- # via web3
-eth-hash[pycryptodome]==0.3.2 \
- --hash=sha256:3f40cecd5ead88184aa9550afc19d057f103728108c5102f592f8415949b5a76 \
- --hash=sha256:de7385148a8e0237ba1240cddbc06d53f56731140f8593bdb8429306f6b42271
- # via
- # eth-utils
- # web3
-eth-keyfile==0.5.1 \
- --hash=sha256:70d734af17efdf929a90bb95375f43522be4ed80c3b9e0a8bca575fb11cd1159 \
- --hash=sha256:939540efb503380bc30d926833e6a12b22c6750de80feef3720d79e5a79de47d
- # via eth-account
-eth-keys==0.3.3 \
- --hash=sha256:412dd5c9732b8e92af40c9c77597f4661c57eba3897aaa55e527af56a8c5ab47 \
- --hash=sha256:a9a1e83e443bd369265b1a1b66dc30f6841bdbb3577ecd042e037b7b405b6cb0
- # via
- # eth-account
- # eth-keyfile
-eth-rlp==0.2.1 \
- --hash=sha256:cc389ef8d7b6f76a98f90bcdbff1b8684b3a78f53d47e871191b50d4d6aee5a1 \
- --hash=sha256:f016f980b0ed42ee7650ba6e4e4d3c4e9aa06d8b9c6825a36d3afe5aa0187a8b
- # via eth-account
-eth-typing==2.2.2 \
- --hash=sha256:1140c7592321dbf10d6663c46f7e43eb0e6410b011b03f14b3df3eb1f76aa9bb \
- --hash=sha256:97ba0f83da7cf1d3668f6ed54983f21168076c552762bf5e06d4a20921877f3f
- # via
- # eth-abi
- # eth-keys
- # eth-utils
- # web3
-eth-utils==1.10.0 \
- --hash=sha256:74240a8c6f652d085ed3c85f5f1654203d2f10ff9062f83b3bad0a12ff321c7a \
- --hash=sha256:bf82762a46978714190b0370265a7148c954d3f0adaa31c6f085ea375e4c61af
- # via
- # eth-abi
- # eth-account
- # eth-keyfile
- # eth-keys
- # eth-rlp
- # rlp
- # web3
-google-api-core==1.27.0 \
- --hash=sha256:407e3e52435a44f6d59d4fef7b5e115bed7b20d77cbdab79e00232bfff7bf912 \
- --hash=sha256:edfca00d76081f359bed7b2efa2dc3a057309e55bf0a91628a0639730e31c357
- # via -r requirements/prod.in
-google-auth==1.35.0 \
- --hash=sha256:997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 \
- --hash=sha256:b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e
- # via google-api-core
-googleapis-common-protos==1.53.0 \
- --hash=sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4 \
- --hash=sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0
- # via google-api-core
-gql==2.0.0 \
- --hash=sha256:35032ddd4bfe6b8f3169f806b022168932385d751eacc5c5f7122e0b3f4d6b88 \
- --hash=sha256:fe8d3a08047f77362ddfcfddba7cae377da2dd66f5e61c59820419c9283d4fb5
- # via -r requirements/prod.in
-graphql-core==2.3.2 \
- --hash=sha256:44c9bac4514e5e30c5a595fac8e3c76c1975cae14db215e8174c7fe995825bad \
- --hash=sha256:aac46a9ac524c9855910c14c48fc5d60474def7f99fd10245e76608eba7af746
- # via gql
-grpcio==1.41.0 \
- --hash=sha256:056806e83eaa09d0af0e452dd353db8f7c90aa2dedcce1112a2d21592550f6b1 \
- --hash=sha256:07594e585a5ba25cf331ddb63095ca51010c34e328a822cb772ffbd5daa62cb5 \
- --hash=sha256:0abd56d90dff3ed566807520de1385126dded21e62d3490a34c180a91f94c1f4 \
- --hash=sha256:15c04d695833c739dbb25c88eaf6abd9a461ec0dbd32f44bc8769335a495cf5a \
- --hash=sha256:1820845e7e6410240eff97742e9f76cd5bf10ca01d36a322e86c0bd5340ac25b \
- --hash=sha256:1bcbeac764bbae329bc2cc9e95d0f4d3b0fb456b92cf12e7e06e3e860a4b31cf \
- --hash=sha256:2410000eb57cf76b05b37d2aee270b686f0a7876710850a2bba92b4ed133e026 \
- --hash=sha256:2882b62f74de8c8a4f7b2be066f6230ecc46f4edc8f42db1fb7358200abe3b25 \
- --hash=sha256:297ee755d3c6cd7e7d3770f298f4d4d4b000665943ae6d2888f7407418a9a510 \
- --hash=sha256:39ce785f0cbd07966a9019386b7a054615b2da63da3c7727f371304d000a1890 \
- --hash=sha256:3a92e4df5330cd384984e04804104ae34f521345917813aa86fc0930101a3697 \
- --hash=sha256:3bbeee115b05b22f6a9fa9bc78f9ab8d9d6bb8c16fdfc60401fc8658beae1099 \
- --hash=sha256:4537bb9e35af62c5189493792a8c34d127275a6d175c8ad48b6314cacba4021e \
- --hash=sha256:462178987f0e5c60d6d1b79e4e95803a4cd789db961d6b3f087245906bb5ae04 \
- --hash=sha256:5292a627b44b6d3065de4a364ead23bab3c9d7a7c05416a9de0c0624d0fe03f4 \
- --hash=sha256:5502832b7cec670a880764f51a335a19b10ff5ab2e940e1ded67f39b88aa02b1 \
- --hash=sha256:585847ed190ea9cb4d632eb0ebf58f1d299bbca5e03284bc3d0fa08bab6ea365 \
- --hash=sha256:59645b2d9f19b5ff30cb46ddbcaa09c398f9cd81e4e476b21c7c55ae1e942807 \
- --hash=sha256:5d4b30d068b022e412adcf9b14c0d9bcbc872e9745b91467edc0a4c700a8bba6 \
- --hash=sha256:7033199706526e7ee06a362e38476dfdf2ddbad625c19b67ed30411d1bb25a18 \
- --hash=sha256:7b07cbbd4eea56738e995fcbba3b60e41fd9aa9dac937fb7985c5dcbc7626260 \
- --hash=sha256:7da3f6f6b857399c9ad85bcbffc83189e547a0a1a777ab68f5385154f8bc1ed4 \
- --hash=sha256:83c1e731c2b76f26689ad88534cafefe105dcf385567bead08f5857cb308246b \
- --hash=sha256:9674a9d3f23702e35a89e22504f41b467893cf704f627cc9cdd118cf1dcc8e26 \
- --hash=sha256:9ecd0fc34aa46eeac24f4d20e67bafaf72ca914f99690bf2898674905eaddaf9 \
- --hash=sha256:a0c4bdd1d646365d10ba1468bcf234ea5ad46e8ce2b115983e8563248614910a \
- --hash=sha256:a144f6cecbb61aace12e5920840338a3d246123a41d795e316e2792e9775ad15 \
- --hash=sha256:a3cd7f945d3e3b82ebd2a4c9862eb9891a5ac87f84a7db336acbeafd86e6c402 \
- --hash=sha256:a614224719579044bd7950554d3b4c1793bb5715cbf0f0399b1f21d283c40ef6 \
- --hash=sha256:ace080a9c3c673c42adfd2116875a63fec9613797be01a6105acf7721ed0c693 \
- --hash=sha256:b2de4e7b5a930be04a4d05c9f5fce7e9191217ccdc174b026c2a7928770dca9f \
- --hash=sha256:b6b68c444abbaf4a2b944a61cf35726ab9645f45d416bcc7cf4addc4b2f2d53d \
- --hash=sha256:be3c6ac822edb509aeef41361ca9c8c5ee52cb9e4973e1977d2bb7d6a460fd97 \
- --hash=sha256:c07acd49541f5f6f9984fe0adf162d77bf70e0f58e77f9960c6f571314ff63a4 \
- --hash=sha256:c1e0a4c86d4cbd93059d5eeceed6e1c2e3e1494e1bf40be9b8ab14302c576162 \
- --hash=sha256:c8c5bc498f6506b6041c30afb7a55c57a9fd535d1a0ac7cdba9b5fd791a85633 \
- --hash=sha256:c95dd6e60e059ff770a2ac9f5a202b75dd64d76b0cd0c48f27d58907e43ed6a6 \
- --hash=sha256:ccd2f1cf11768d1f6fbe4e13e8b8fb0ccfe9914ceeff55a367d5571e82eeb543 \
- --hash=sha256:d0cc0393744ce3ce1b237ae773635cc928470ff46fb0d3f677e337a38e5ed4f6 \
- --hash=sha256:d539ebd05a2bbfbf897d41738d37d162d5c3d9f2b1f8ddf2c4f75e2c9cf59907 \
- --hash=sha256:d71aa430b2ac40e18e388504ac34cc91d49d811855ca507c463a21059bf364f0 \
- --hash=sha256:dcb5f324712a104aca4a459e524e535f205f36deb8005feb4f9d3ff0a22b5177 \
- --hash=sha256:e516124010ef60d5fc2e0de0f1f987599249dc55fd529001f17f776a4145767f \
- --hash=sha256:fb64abf0d92134cb0ba4496a3b7ab918588eee42de20e5b3507fe6ee16db97ee
- # via -r requirements/prod.in
-hexbytes==0.2.2 \
- --hash=sha256:a5881304d186e87578fb263a85317c808cf130e1d4b3d37d30142ab0f7898d03 \
- --hash=sha256:ef53c37ea9f316fff86fcb1df057b4c6ba454da348083e972031bbf7bc9c3acc
- # via
- # eth-account
- # eth-rlp
- # web3
-idna==3.2 \
- --hash=sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a \
- --hash=sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3
- # via
- # requests
- # yarl
-ipfshttpclient==0.8.0a2 \
- --hash=sha256:0d80e95ee60b02c7d414e79bf81a36fc3c8fbab74265475c52f70b2620812135 \
- --hash=sha256:ce6bac0e3963c4ced74d7eb6978125362bb05bbe219088ca48f369ce14d3cc39
- # via
- # -r requirements/prod.in
- # web3
-jsonschema==3.2.0 \
- --hash=sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163 \
- --hash=sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a
- # via
- # notifiers
- # web3
-lru-dict==1.1.7 \
- --hash=sha256:45b81f67d75341d4433abade799a47e9c42a9e22a118531dcb5e549864032d7c
- # via web3
-multiaddr==0.0.9 \
- --hash=sha256:30b2695189edc3d5b90f1c303abb8f02d963a3a4edf2e7178b975eb417ab0ecf \
- --hash=sha256:5c0f862cbcf19aada2a899f80ef896ddb2e85614e0c8f04dd287c06c69dac95b
- # via ipfshttpclient
-multidict==5.1.0 \
- --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \
- --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \
- --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \
- --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \
- --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \
- --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \
- --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \
- --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \
- --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \
- --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \
- --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \
- --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \
- --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \
- --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \
- --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \
- --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \
- --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \
- --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \
- --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \
- --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \
- --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \
- --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \
- --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \
- --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \
- --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \
- --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \
- --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \
- --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \
- --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \
- --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \
- --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \
- --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \
- --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \
- --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \
- --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \
- --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \
- --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80
- # via
- # aiohttp
- # yarl
-netaddr==0.8.0 \
- --hash=sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac \
- --hash=sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243
- # via multiaddr
-notifiers==1.2.1 \
- --hash=sha256:171ae79215fcf119e34992ad7e1f95f0709f93997203b3fc6f115b5cedd780a6 \
- --hash=sha256:34625af405f4aa19293eaaefe145ccc92c6018ae9798f53a03a7fcc996e541aa
- # via -r requirements/prod.in
-packaging==21.0 \
- --hash=sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7 \
- --hash=sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14
- # via google-api-core
-parsimonious==0.8.1 \
- --hash=sha256:3add338892d580e0cb3b1a39e4a1b427ff9f687858fdd61097053742391a9f6b
- # via eth-abi
-promise==2.3 \
- --hash=sha256:dfd18337c523ba4b6a58801c164c1904a9d4d1b1747c7d5dbf45b693a49d93d0
- # via
- # gql
- # graphql-core
-protobuf===3.18.0 \
- --hash=sha256:0a59ea8da307118372750e2fdfe0961622e675b8dd35e05c42384d618189a938 \
- --hash=sha256:17181fc0814655812aac108e755bd5185d71aa8d81bd241cec6e232c84097918 \
- --hash=sha256:18b308946a592e245299391e53c01b5b8efc2794f49986e80f37d7b5e60a270f \
- --hash=sha256:1f3ecec3038c2fb4dad952d3d6cb9ca301999903a09e43794fb348da48f7577f \
- --hash=sha256:3b5b81bb665aac548b413480f4e0d8c38a74bc4dea57835f288a3ce74f63dfe9 \
- --hash=sha256:42c04e66ec5a38ad2171639dc9860c2f9594668f709ea3a4a192acf7346853a7 \
- --hash=sha256:5201333b7aa711965c5769b250f8565a9924e8e27f8b622bbc5e6847aeaab1b1 \
- --hash=sha256:568c049ff002a7523ed33fb612e6b97da002bf87ffb619a1fc3eadf2257a3b31 \
- --hash=sha256:5730de255c95b3403eedd1a568eb28203b913b6192ff5a3fdc3ff30f37107a38 \
- --hash=sha256:615099e52e9fbc9fde00177267a94ca820ecf4e80093e390753568b7d8cb3c1a \
- --hash=sha256:7646c20605fbee57e77fdbc4a90175538281b152f46ba17019916593f8062c2a \
- --hash=sha256:7e791a94db391ae22b3943fc88f6ba0e1f62b6ad58b33db7517df576c7834d23 \
- --hash=sha256:80b0a5157f3a53043daf8eb7cfa1220b27a5a63dd6655dbd8e1e6f7b5dcd6347 \
- --hash=sha256:877664b1b8d1e23553634f625e4e12aae4ff16cbbef473f8118c239d478f422a \
- --hash=sha256:9072cb18fca8998b77f969fb74d25a11d7f4a39a8b1ddc3cf76cd5abda8499cb \
- --hash=sha256:9147565f93e6699d7512747766598afe63205f226ac7b61f47954974c9aab852 \
- --hash=sha256:93c077fd83879cf48f327a2491c24da447a09da6a7ab3cc311a6f5a61fcb5de0 \
- --hash=sha256:d11465040cadcea8ecf5f0b131af5099a9696f9d0bef6f88148b372bacc1c52d \
- --hash=sha256:f589346b5b3f702c1d30e2343c9897e6c35e7bd495c10a0e17d11ecb5ee5bd06 \
- --hash=sha256:f6138462643adce0ed6e49007a63b7fd7dc4fda1ef4e15a70fcebe76c1407a71 \
- --hash=sha256:f7c8193ec805324ff6024242b00f64a24b94d56b895f62bf28a9d72a228d4fca
- # via
- # -r requirements/prod.in
- # google-api-core
- # googleapis-common-protos
- # web3
-pyasn1-modules==0.2.8 \
- --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \
- --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74
- # via google-auth
-pyasn1==0.4.8 \
- --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \
- --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba
- # via
- # pyasn1-modules
- # rsa
-pycryptodome==3.10.4 \
- --hash=sha256:04e14c732c3693d2830839feed5129286ce47ffa8bfe90e4ae042c773e51c677 \
- --hash=sha256:11d3164fb49fdee000fde05baecce103c0c698168ef1a18d9c7429dd66f0f5bb \
- --hash=sha256:217dcc0c92503f7dd4b3d3b7d974331a4419f97f555c99a845c3b366fed7056b \
- --hash=sha256:24c1b7705d19d8ae3e7255431efd2e526006855df62620118dd7b5374c6372f6 \
- --hash=sha256:309529d2526f3fb47102aeef376b3459110a6af7efb162e860b32e3a17a46f06 \
- --hash=sha256:3a153658d97258ca20bf18f7fe31c09cc7c558b6f8974a6ec74e19f6c634bd64 \
- --hash=sha256:3f9fb499e267039262569d08658132c9cd8b136bf1d8c56b72f70ed05551e526 \
- --hash=sha256:3faa6ebd35c61718f3f8862569c1f38450c24f3ededb213e1a64806f02f584bc \
- --hash=sha256:40083b0d7f277452c7f2dd4841801f058cc12a74c219ee4110d65774c6a58bef \
- --hash=sha256:49e54f2245befb0193848c8c8031d8d1358ed4af5a1ae8d0a3ba669a5cdd3a72 \
- --hash=sha256:4e8fc4c48365ce8a542fe48bf1360da05bb2851df12f64fc94d751705e7cdbe7 \
- --hash=sha256:54d4e4d45f349d8c4e2f31c2734637ff62a844af391b833f789da88e43a8f338 \
- --hash=sha256:66301e4c42dee43ee2da256625d3fe81ef98cc9924c2bd535008cc3ad8ded77b \
- --hash=sha256:6b45fcace5a5d9c57ba87cf804b161adc62aa826295ce7f7acbcbdc0df74ed37 \
- --hash=sha256:7efec2418e9746ec48e264eea431f8e422d931f71c57b1c96ee202b117f58fa9 \
- --hash=sha256:851e6d4930b160417235955322db44adbdb19589918670d63f4acd5d92959ac0 \
- --hash=sha256:8e82524e7c354033508891405574d12e612cc4fdd3b55d2c238fc1a3e300b606 \
- --hash=sha256:8ec154ec445412df31acf0096e7f715e30e167c8f2318b8f5b1ab7c28f4c82f7 \
- --hash=sha256:91ba4215a1f37d0f371fe43bc88c5ff49c274849f3868321c889313787de7672 \
- --hash=sha256:97e7df67a4da2e3f60612bbfd6c3f243a63a15d8f4797dd275e1d7b44a65cb12 \
- --hash=sha256:9a2312440057bf29b9582f72f14d79692044e63bfbc4b4bbea8559355f44f3dd \
- --hash=sha256:a7471646d8cd1a58bb696d667dcb3853e5c9b341b68dcf3c3cc0893d0f98ca5f \
- --hash=sha256:ac3012c36633564b2b5539bb7c6d9175f31d2ce74844e9abe654c428f02d0fd8 \
- --hash=sha256:b1daf251395af7336ddde6a0015ba5e632c18fe646ba930ef87402537358e3b4 \
- --hash=sha256:b217b4525e60e1af552d62bec01b4685095436d4de5ecde0f05d75b2f95ba6d4 \
- --hash=sha256:c61ea053bd5d4c12a063d7e704fbe1c45abb5d2510dab55bd95d166ba661604f \
- --hash=sha256:c6469d1453f5864e3321a172b0aa671b938d753cbf2376b99fa2ab8841539bb8 \
- --hash=sha256:cefe6b267b8e5c3c72e11adec35a9c7285b62e8ea141b63e87055e9a9e5f2f8c \
- --hash=sha256:d713dc0910e5ded07852a05e9b75f1dd9d3a31895eebee0668f612779b2a748c \
- --hash=sha256:db15fa07d2a4c00beeb5e9acdfdbc1c79f9ccfbdc1a8f36c82c4aa44951b33c9
- # via
- # eth-hash
- # eth-keyfile
-pyparsing==2.4.7 \
- --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \
- --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b
- # via packaging
-pyrsistent==0.18.0 \
- --hash=sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2 \
- --hash=sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7 \
- --hash=sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea \
- --hash=sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426 \
- --hash=sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710 \
- --hash=sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1 \
- --hash=sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396 \
- --hash=sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2 \
- --hash=sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680 \
- --hash=sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35 \
- --hash=sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427 \
- --hash=sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b \
- --hash=sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b \
- --hash=sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f \
- --hash=sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef \
- --hash=sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c \
- --hash=sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4 \
- --hash=sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d \
- --hash=sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78 \
- --hash=sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b \
- --hash=sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72
- # via jsonschema
-pytz==2021.3 \
- --hash=sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c \
- --hash=sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326
- # via google-api-core
-requests==2.26.0 \
- --hash=sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24 \
- --hash=sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7
- # via
- # google-api-core
- # gql
- # ipfshttpclient
- # notifiers
- # web3
-rfc3987==1.3.8 \
- --hash=sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 \
- --hash=sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733
- # via notifiers
-rlp==2.0.1 \
- --hash=sha256:52a57c9f53f03c88b189283734b397314288250cc4a3c4113e9e36e2ac6bdd16 \
- --hash=sha256:665e8312750b3fc5f7002e656d05b9dcb6e93b6063df40d95c49ad90c19d1f0e
- # via
- # eth-account
- # eth-rlp
-rsa==4.7.2 \
- --hash=sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2 \
- --hash=sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9
- # via google-auth
-rx==1.6.1 \
- --hash=sha256:13a1d8d9e252625c173dc795471e614eadfe1cf40ffc684e08b8fff0d9748c23 \
- --hash=sha256:7357592bc7e881a95e0c2013b73326f704953301ab551fbc8133a6fadab84105
- # via graphql-core
-six==1.16.0 \
- --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
- --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
- # via
- # google-api-core
- # google-auth
- # gql
- # graphql-core
- # grpcio
- # jsonschema
- # multiaddr
- # parsimonious
- # promise
- # tenacity
-tenacity==7.0.0 \
- --hash=sha256:5bd16ef5d3b985647fe28dfa6f695d343aa26479a04e8792b9d3c8f49e361ae1 \
- --hash=sha256:a0ce48587271515db7d3a5e700df9ae69cce98c4b57c23a4886da15243603dd8
- # via -r requirements/prod.in
-toolz==0.11.1 \
- --hash=sha256:1bc473acbf1a1db4e72a1ce587be347450e8f08324908b8a266b486f408f04d5 \
- --hash=sha256:c7a47921f07822fe534fb1c01c9931ab335a4390c782bd28c6bcc7c2f71f3fbf
- # via cytoolz
-typing-extensions==3.10.0.2 \
- --hash=sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e \
- --hash=sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7 \
- --hash=sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34
- # via aiohttp
-urllib3==1.26.7 \
- --hash=sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece \
- --hash=sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844
- # via requests
-varint==1.0.2 \
- --hash=sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5
- # via multiaddr
-web3==5.24.0 \
- --hash=sha256:6535618b07a8d3d7496374a3b7714cfade4f94e6dc085a518718d4c6f776ac3f \
- --hash=sha256:69389a8f6d5d3effc7d07f50f4801d0a88b9530ec0757a54ca1dafe425f0c23e
- # via -r requirements/prod.in
-websockets==9.1 \
- --hash=sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc \
- --hash=sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e \
- --hash=sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135 \
- --hash=sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02 \
- --hash=sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3 \
- --hash=sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf \
- --hash=sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b \
- --hash=sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2 \
- --hash=sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af \
- --hash=sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d \
- --hash=sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880 \
- --hash=sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077 \
- --hash=sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f \
- --hash=sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec \
- --hash=sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25 \
- --hash=sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0 \
- --hash=sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe \
- --hash=sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a \
- --hash=sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb \
- --hash=sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d \
- --hash=sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857 \
- --hash=sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c \
- --hash=sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0 \
- --hash=sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40 \
- --hash=sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4 \
- --hash=sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20 \
- --hash=sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314 \
- --hash=sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da \
- --hash=sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58 \
- --hash=sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2 \
- --hash=sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd \
- --hash=sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a \
- --hash=sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd
- # via web3
-yarl==1.6.3 \
- --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \
- --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \
- --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \
- --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \
- --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \
- --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \
- --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \
- --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \
- --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \
- --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \
- --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \
- --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \
- --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \
- --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \
- --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \
- --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \
- --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \
- --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \
- --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \
- --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \
- --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \
- --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \
- --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \
- --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \
- --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \
- --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \
- --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \
- --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \
- --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \
- --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \
- --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \
- --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \
- --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \
- --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \
- --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \
- --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \
- --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71
- # via aiohttp
-
-# WARNING: The following packages were not pinned, but pip requires them to be
-# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
-# setuptools
diff --git a/src/clients.py b/src/clients.py
new file mode 100644
index 0000000..ac6e68d
--- /dev/null
+++ b/src/clients.py
@@ -0,0 +1,29 @@
+import logging
+from typing import Dict
+
+import backoff
+from gql import Client
+from gql.transport.aiohttp import AIOHTTPTransport
+from graphql import DocumentNode
+
+from src.settings import STAKEWISE_SUBGRAPH_URL, UNISWAP_V3_SUBGRAPH_URL
+
+logger = logging.getLogger(__name__)
+
+sw_gql_client = Client(
+ transport=AIOHTTPTransport(url=STAKEWISE_SUBGRAPH_URL),
+ fetch_schema_from_transport=True,
+)
+
+uniswap_v3_gql_client = Client(
+ transport=AIOHTTPTransport(url=UNISWAP_V3_SUBGRAPH_URL),
+ fetch_schema_from_transport=True,
+)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=300)
+async def execute_graphql_query(
+ client: Client, query: DocumentNode, variables: Dict
+) -> Dict:
+ """Executes GraphQL query."""
+ return await client.execute_async(query, variable_values=variables)
diff --git a/proto/eth/__init__.py b/src/distributor/__init__.py
similarity index 100%
rename from proto/eth/__init__.py
rename to src/distributor/__init__.py
diff --git a/src/distributor/controller.py b/src/distributor/controller.py
new file mode 100644
index 0000000..5101360
--- /dev/null
+++ b/src/distributor/controller.py
@@ -0,0 +1,187 @@
+import asyncio
+import logging
+
+from web3 import Web3
+
+from src.ipfs import submit_ipns_vote
+from src.settings import REWARD_ETH_TOKEN_CONTRACT_ADDRESS, SWISE_TOKEN_CONTRACT_ADDRESS
+
+from .eth1 import (
+ get_active_tokens_allocations,
+ get_disabled_stakers_reward_eth_distributions,
+ get_distributor_claimed_accounts,
+ get_swise_holders,
+)
+from .ipfs import get_unclaimed_balances, upload_claims
+from .merkle_tree import calculate_merkle_root
+from .rewards import DistributorRewards
+from .types import Distribution, DistributorVote, DistributorVotingParameters, Rewards
+from .uniswap_v3 import get_uniswap_v3_distributions, get_uniswap_v3_pools
+
+logger = logging.getLogger(__name__)
+w3 = Web3()
+
+
+class DistributorController(object):
+ """Updates merkle root and submits proofs to the IPFS."""
+
+ def __init__(self, ipns_key_id: str) -> None:
+ self.last_to_block = None
+ self.ipns_key_id = ipns_key_id
+
+ async def process(self, voting_params: DistributorVotingParameters) -> None:
+ """Submits vote for the new merkle root and merkle proofs to the IPFS."""
+ from_block = voting_params["from_block"]
+ to_block = voting_params["to_block"]
+ last_updated_at_block = voting_params["last_updated_at_block"]
+ current_nonce = voting_params["rewards_nonce"]
+
+ # skip submitting vote if too early or vote has been already submitted
+ if to_block <= last_updated_at_block or self.last_to_block == to_block:
+ return
+
+ logger.info(
+ f"Voting for Merkle Distributor rewards: from block={from_block}, to block={to_block}"
+ )
+
+ # fetch active token allocations for the Distributor
+ active_allocations = await get_active_tokens_allocations(
+ from_block=from_block, to_block=to_block
+ )
+ uniswap_v3_pools = await get_uniswap_v3_pools(to_block)
+
+ # fetch uni v3 distributions
+ all_distributions = await get_uniswap_v3_distributions(
+ pools=uniswap_v3_pools,
+ active_allocations=active_allocations,
+ from_block=from_block,
+ to_block=to_block,
+ )
+
+ # fetch disabled stakers distributions
+ disabled_stakers_distributions = (
+ await get_disabled_stakers_reward_eth_distributions(
+ distributor_reward=voting_params["distributor_reward"],
+ to_block=to_block,
+ )
+ )
+ all_distributions.extend(disabled_stakers_distributions)
+
+ # fetch protocol reward distributions
+ protocol_reward = voting_params["protocol_reward"]
+ if protocol_reward > 0:
+ all_distributions.append(
+ Distribution(
+ contract=SWISE_TOKEN_CONTRACT_ADDRESS,
+ block_number=to_block,
+ uni_v3_token=SWISE_TOKEN_CONTRACT_ADDRESS,
+ reward_token=REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ reward=protocol_reward,
+ )
+ )
+
+ last_merkle_root = voting_params["last_merkle_root"]
+ last_merkle_proofs = voting_params["last_merkle_proofs"]
+ if not all_distributions:
+ if last_merkle_root is None or last_merkle_proofs is None:
+ logger.warning(
+ f"Skipping merkle root update: no distributions"
+ f" after rewards update with block number={to_block}"
+ )
+ else:
+ # the rewards distributions has not change, update with the previous merkle root parameters
+ # to re-enable claiming for the users
+ logger.warning("Voting for the same merkle root: no new distributions")
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "string", "bytes32"],
+ [current_nonce, last_merkle_proofs, last_merkle_root],
+ )
+ vote = DistributorVote(
+ rewards_updated_at_block=to_block,
+ nonce=current_nonce,
+ merkle_root=last_merkle_root,
+ merkle_proofs=last_merkle_proofs,
+ )
+ ipns_record = submit_ipns_vote(
+ encoded_data=encoded_data, vote=vote, key_id=self.ipns_key_id
+ )
+ logger.info(
+ f"Distributor vote has been successfully submitted:"
+ f" ipfs={ipns_record['ipfs_id']},"
+ f" ipns={ipns_record['ipns_id']}"
+ )
+ return
+
+ if last_merkle_root is not None and last_merkle_proofs is not None:
+ # fetch accounts that have claimed since last merkle root update
+ claimed_accounts = await get_distributor_claimed_accounts(last_merkle_root)
+
+ # calculate unclaimed rewards
+ unclaimed_rewards = get_unclaimed_balances(
+ claimed_accounts=claimed_accounts,
+ merkle_proofs=last_merkle_proofs,
+ )
+ else:
+ unclaimed_rewards = {}
+
+ swise_holders = await get_swise_holders(
+ from_block=from_block,
+ to_block=to_block,
+ unclaimed_rewards=unclaimed_rewards,
+ )
+
+ # calculate reward distributions with coroutines
+ tasks = []
+ for dist in all_distributions:
+ distributor_rewards = DistributorRewards(
+ uniswap_v3_pools=uniswap_v3_pools,
+ block_number=dist["block_number"],
+ reward_token=dist["reward_token"],
+ uni_v3_token=dist["uni_v3_token"],
+ swise_holders=swise_holders,
+ )
+ task = distributor_rewards.get_rewards(
+ contract_address=dist["contract"], reward=dist["reward"]
+ )
+ tasks.append(task)
+
+ # merge results
+ results = await asyncio.gather(*tasks)
+ final_rewards: Rewards = {}
+ for rewards in results:
+ final_rewards = DistributorRewards.merge_rewards(final_rewards, rewards)
+
+ # merge final rewards with unclaimed rewards
+ if unclaimed_rewards:
+ final_rewards = DistributorRewards.merge_rewards(
+ final_rewards, unclaimed_rewards
+ )
+
+ # calculate merkle root
+ merkle_root, claims = calculate_merkle_root(final_rewards)
+ logger.info(f"Generated new merkle root: {merkle_root}")
+
+ claims_link = upload_claims(claims)
+ logger.info(f"Claims uploaded to: {claims_link}")
+
+ # submit vote
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "string", "bytes32"],
+ [current_nonce, claims_link, merkle_root],
+ )
+ vote = DistributorVote(
+ rewards_updated_at_block=to_block,
+ nonce=current_nonce,
+ merkle_root=merkle_root,
+ merkle_proofs=claims_link,
+ )
+ ipns_record = submit_ipns_vote(
+ encoded_data=encoded_data, vote=vote, key_id=self.ipns_key_id
+ )
+ logger.info(
+ f"Distributor vote has been successfully submitted:"
+ f" ipfs={ipns_record['ipfs_id']},"
+ f" ipns={ipns_record['ipns_id']}"
+ )
+
+ self.last_to_block = to_block
diff --git a/src/distributor/eth1.py b/src/distributor/eth1.py
new file mode 100644
index 0000000..fa34d9e
--- /dev/null
+++ b/src/distributor/eth1.py
@@ -0,0 +1,258 @@
+from typing import Dict
+
+import backoff
+from ens.constants import EMPTY_ADDR_HEX
+from eth_typing import ChecksumAddress, HexStr
+from web3 import Web3
+from web3.types import BlockNumber, Wei
+
+from src.clients import execute_graphql_query, sw_gql_client
+from src.graphql_queries import (
+ ACTIVE_TOKEN_DISTRIBUTIONS_QUERY,
+ DISABLED_STAKER_ACCOUNTS_QUERY,
+ DISTRIBUTOR_CLAIMED_ACCOUNTS_QUERY,
+ SWISE_HOLDERS_QUERY,
+)
+from src.settings import (
+ REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ STAKED_ETH_TOKEN_CONTRACT_ADDRESS,
+ SWISE_TOKEN_CONTRACT_ADDRESS,
+)
+
+from .types import (
+ Balances,
+ ClaimedAccounts,
+ Distribution,
+ Distributions,
+ Rewards,
+ TokenAllocation,
+ TokenAllocations,
+)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_active_tokens_allocations(
+ from_block: BlockNumber, to_block: BlockNumber
+) -> TokenAllocations:
+ """Fetches active token allocations."""
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=ACTIVE_TOKEN_DISTRIBUTIONS_QUERY,
+ variables=dict(from_block=from_block, to_block=to_block, last_id=last_id),
+ )
+ distributions_chunk = result.get("tokenDistributions", [])
+ distributions = distributions_chunk
+
+ # accumulate chunks of distributions
+ while len(distributions_chunk) >= 1000:
+ last_id = distributions_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=ACTIVE_TOKEN_DISTRIBUTIONS_QUERY,
+ variables=dict(from_block=from_block, to_block=to_block, last_id=last_id),
+ )
+ distributions_chunk = result.get("tokenDistributions", [])
+ distributions.extend(distributions_chunk)
+
+ allocations: TokenAllocations = {}
+ for dist in distributions:
+ dist_start_block: BlockNumber = BlockNumber(int(dist["startedAtBlock"]))
+ dist_end_block: BlockNumber = BlockNumber(int(dist["endedAtBlock"]))
+
+ if dist_end_block <= from_block or dist_start_block >= to_block:
+ # distributions are out of current range
+ continue
+
+ allocation = TokenAllocation(
+ from_block=dist_start_block,
+ to_block=dist_end_block,
+ reward_token=Web3.toChecksumAddress(dist["token"]),
+ reward=Web3.toWei(dist["amount"], "ether"),
+ )
+ allocations.setdefault(Web3.toChecksumAddress(dist["beneficiary"]), []).append(
+ allocation
+ )
+
+ return allocations
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_disabled_stakers_reward_eth_distributions(
+ distributor_reward: Wei, to_block: BlockNumber
+) -> Distributions:
+ """Fetches disabled stakers reward ETH distributions based on their staked ETH balances."""
+ if distributor_reward <= 0:
+ return []
+
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=DISABLED_STAKER_ACCOUNTS_QUERY,
+ variables=dict(block_number=to_block, last_id=last_id),
+ )
+ stakers_chunk = result.get("stakers", [])
+ stakers = stakers_chunk
+
+ # accumulate chunks of validators
+ while len(stakers_chunk) >= 1000:
+ last_id = stakers_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=DISABLED_STAKER_ACCOUNTS_QUERY,
+ variables=dict(block_number=to_block, last_id=last_id),
+ )
+ stakers_chunk = result.get("stakers", [])
+ stakers.extend(stakers_chunk)
+
+ reward_per_token: Wei = Web3.toWei(
+ result["rewardEthTokens"][0]["rewardPerStakedEthToken"], "ether"
+ )
+
+ # filter valid stakers and calculated total distributor principal
+ distributor_principal = Wei(0)
+ principals: Dict[ChecksumAddress, Wei] = {}
+ for staker in stakers:
+ staker_reward_per_token: Wei = Web3.toWei(
+ staker["rewardPerStakedEthToken"], "ether"
+ )
+ staker_address: ChecksumAddress = Web3.toChecksumAddress(staker["id"])
+ staker_principal: Wei = Web3.toWei(staker["principalBalance"], "ether")
+ if staker_reward_per_token >= reward_per_token or staker_principal <= 0:
+ continue
+
+ principals[staker_address] = staker_principal
+ distributor_principal += staker_principal
+
+ if distributor_principal <= 0:
+ return []
+
+ # create distributions
+ distributions: Distributions = []
+ distributed: Wei = Wei(0)
+ last_staker_index = len(principals) - 1
+ for i, staker_address in enumerate(principals):
+ if i == last_staker_index:
+ reward: Wei = Wei(distributor_reward - distributed)
+ else:
+ reward: Wei = Wei(
+ (distributor_reward * principals[staker_address])
+ // distributor_principal
+ )
+
+ distribution = Distribution(
+ contract=staker_address,
+ block_number=to_block,
+ uni_v3_token=STAKED_ETH_TOKEN_CONTRACT_ADDRESS,
+ reward_token=REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ reward=reward,
+ )
+ distributions.append(distribution)
+ distributed += reward
+
+ return distributions
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_distributor_claimed_accounts(merkle_root: HexStr) -> ClaimedAccounts:
+ """Fetches addresses that have claimed their tokens from the `MerkleDistributor` contract."""
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=DISTRIBUTOR_CLAIMED_ACCOUNTS_QUERY,
+ variables=dict(merkle_root=merkle_root, last_id=last_id),
+ )
+ claims_chunk = result.get("merkleDistributorClaims", [])
+ claims = claims_chunk
+
+ # accumulate chunks of claims
+ while len(claims_chunk) >= 1000:
+ last_id = claims_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=DISTRIBUTOR_CLAIMED_ACCOUNTS_QUERY,
+ variables=dict(merkle_root=merkle_root, last_id=last_id),
+ )
+ claims_chunk = result.get("merkleDistributorClaims", [])
+ claims.extend(claims_chunk)
+
+ return set(Web3.toChecksumAddress(claim["account"]) for claim in claims)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_swise_holders(
+ from_block: BlockNumber, to_block: BlockNumber, unclaimed_rewards: Rewards
+) -> Balances:
+ """Fetches SWISE holding points."""
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=SWISE_HOLDERS_QUERY,
+ variables=dict(block_number=to_block, last_id=last_id),
+ )
+ swise_holders_chunk = result.get("stakeWiseTokenHolders", [])
+ swise_holders = swise_holders_chunk
+
+ # accumulate chunks of claims
+ while len(swise_holders_chunk) >= 1000:
+ last_id = swise_holders_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=SWISE_HOLDERS_QUERY,
+ variables=dict(block_number=to_block, last_id=last_id),
+ )
+ swise_holders_chunk = result.get("stakeWiseTokenHolders", [])
+ swise_holders.extend(swise_holders_chunk)
+
+ # process swise holders
+ holding_points: Dict[ChecksumAddress, int] = {}
+ total_points = 0
+ for swise_holder in swise_holders:
+ account = Web3.toChecksumAddress(swise_holder["id"])
+ if account == EMPTY_ADDR_HEX:
+ continue
+
+ balance = Web3.toWei(swise_holder["balance"], "ether")
+ prev_holding_points = int(swise_holder["holdingPoints"])
+ updated_at_block = BlockNumber(int(swise_holder["updatedAtBlock"]))
+ if from_block > updated_at_block:
+ updated_at_block = from_block
+ prev_holding_points = 0
+
+ account_holding_points = prev_holding_points + (
+ balance * (to_block - updated_at_block)
+ )
+ if account_holding_points <= 0:
+ continue
+
+ holding_points[account] = account_holding_points
+ total_points += account_holding_points
+
+ # process unclaimed SWISE
+ for account, rewards in unclaimed_rewards.items():
+ balance = int(rewards.get(SWISE_TOKEN_CONTRACT_ADDRESS, "0"))
+ if balance <= 0:
+ continue
+
+ account_holding_points = balance * (to_block - from_block)
+ if account_holding_points <= 0:
+ continue
+
+ holding_points[account] = (
+ holding_points.setdefault(account, 0) + account_holding_points
+ )
+ total_points += account_holding_points
+
+ return Balances(total_supply=total_points, balances=holding_points)
diff --git a/src/distributor/ipfs.py b/src/distributor/ipfs.py
new file mode 100644
index 0000000..d3c4a4a
--- /dev/null
+++ b/src/distributor/ipfs.py
@@ -0,0 +1,50 @@
+import logging
+from typing import Dict
+
+import backoff
+import ipfshttpclient
+
+from src.settings import IPFS_ENDPOINT
+
+from .types import ClaimedAccounts, Claims, Rewards
+
+logger = logging.getLogger(__name__)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def get_unclaimed_balances(
+ merkle_proofs: str, claimed_accounts: ClaimedAccounts
+) -> Rewards:
+ """Fetches balances of previous merkle drop from IPFS and removes the accounts that have already claimed."""
+ merkle_proofs = merkle_proofs.replace("ipfs://", "").replace("/ipfs/", "")
+
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ prev_claims: Dict = client.get_json(merkle_proofs)
+
+ unclaimed_rewards: Rewards = Rewards({})
+ for account, claim in prev_claims.items():
+ if account in claimed_accounts:
+ continue
+
+ # TODO: remove after first v2 merkle root update
+ key = "reward_tokens" if "reward_tokens" in claim else "tokens"
+ for token, reward in zip(claim[key], claim["values"]):
+ prev_unclaimed = unclaimed_rewards.setdefault(account, {}).setdefault(
+ token, "0"
+ )
+ unclaimed_rewards[account][token] = str(int(prev_unclaimed) + int(reward))
+
+ return unclaimed_rewards
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def upload_claims(claims: Claims) -> str:
+ """Submits claims to the IPFS and pins the file."""
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ ipfs_id = client.add_json(claims)
+ client.pin.add(ipfs_id)
+
+ if not ipfs_id.startswith("/ipfs/"):
+ ipfs_id = "/ipfs/" + ipfs_id
+
+ return ipfs_id
diff --git a/src/merkle_distributor/merkle_tree.py b/src/distributor/merkle_tree.py
similarity index 60%
rename from src/merkle_distributor/merkle_tree.py
rename to src/distributor/merkle_tree.py
index 3b7c263..10517ab 100644
--- a/src/merkle_distributor/merkle_tree.py
+++ b/src/distributor/merkle_tree.py
@@ -1,9 +1,15 @@
-from typing import List, Union, Dict
+from collections import OrderedDict
+from typing import Dict, List, Tuple, Union
+from eth_typing import ChecksumAddress
from eth_typing.encoding import HexStr
from eth_utils.crypto import keccak
from web3 import Web3
+from .types import Claim, Claims, Rewards
+
+w3 = Web3()
+
# Inspired by https://github.com/Uniswap/merkle-distributor/blob/master/src/merkle-tree.ts
class MerkleTree(object):
@@ -32,7 +38,7 @@ def get_root(self) -> bytes:
return self.layers[-1][0]
def get_hex_root(self) -> HexStr:
- return Web3.toHex(self.get_root())
+ return w3.toHex(self.get_root())
def get_proof(self, element: bytes) -> List[bytes]:
index = self.element_positions.get(element, None)
@@ -51,7 +57,7 @@ def get_proof(self, element: bytes) -> List[bytes]:
def get_hex_proof(self, element: bytes) -> List[HexStr]:
proof = self.get_proof(element)
- return [Web3.toHex(p) for p in proof]
+ return [w3.toHex(p) for p in proof]
@staticmethod
def get_next_layer(elements: List[bytes]) -> List[bytes]:
@@ -89,3 +95,49 @@ def get_pair_element(index: int, layer: List[bytes]) -> Union[bytes, None]:
return layer[pair_index]
return None
+
+
+def get_merkle_node(
+ index: int,
+ tokens: List[ChecksumAddress],
+ account: ChecksumAddress,
+ values: List[str],
+) -> bytes:
+ """Generates node for merkle tree."""
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "address[]", "address", "uint256[]"],
+ [index, tokens, account, values],
+ )
+ return w3.keccak(primitive=encoded_data)
+
+
+def calculate_merkle_root(rewards: Rewards) -> Tuple[HexStr, Claims]:
+ """Calculates merkle root and claims for the rewards."""
+ merkle_elements: List[bytes] = []
+ accounts: List[ChecksumAddress] = sorted(rewards.keys())
+ claims: Claims = OrderedDict()
+ for i, account in enumerate(accounts):
+ tokens: List[ChecksumAddress] = sorted(rewards[account].keys())
+ values: List[str] = [rewards[account][token] for token in tokens]
+ claim: Claim = OrderedDict(index=i, tokens=tokens, values=values)
+ claims[account] = claim
+
+ merkle_element = get_merkle_node(
+ index=i,
+ account=account,
+ tokens=tokens,
+ values=values,
+ )
+ merkle_elements.append(merkle_element)
+
+ merkle_tree = MerkleTree(merkle_elements)
+
+ # collect proofs
+ for i, account in enumerate(accounts):
+ proof: List[HexStr] = merkle_tree.get_hex_proof(merkle_elements[i])
+ claims[account]["proof"] = proof
+
+ # calculate merkle root
+ merkle_root: HexStr = merkle_tree.get_hex_root()
+
+ return merkle_root, claims
diff --git a/src/distributor/rewards.py b/src/distributor/rewards.py
new file mode 100644
index 0000000..60729f2
--- /dev/null
+++ b/src/distributor/rewards.py
@@ -0,0 +1,209 @@
+import copy
+import logging
+from typing import List, Set
+
+from eth_typing import BlockNumber, ChecksumAddress
+
+from src.settings import (
+ DISTRIBUTOR_FALLBACK_ADDRESS,
+ REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ STAKED_ETH_TOKEN_CONTRACT_ADDRESS,
+ SWISE_TOKEN_CONTRACT_ADDRESS,
+)
+
+from .types import Balances, Rewards, UniswapV3Pools
+from .uniswap_v3 import (
+ get_uniswap_v3_liquidity_points,
+ get_uniswap_v3_single_token_balances,
+)
+
+logger = logging.getLogger(__name__)
+
+
+class DistributorRewards(object):
+ def __init__(
+ self,
+ uniswap_v3_pools: UniswapV3Pools,
+ block_number: BlockNumber,
+ reward_token: ChecksumAddress,
+ uni_v3_token: ChecksumAddress,
+ swise_holders: Balances,
+ ) -> None:
+ self.uni_v3_staked_eth_pools = uniswap_v3_pools["staked_eth_pools"]
+ self.uni_v3_reward_eth_pools = uniswap_v3_pools["reward_eth_pools"]
+ self.uni_v3_swise_pools = uniswap_v3_pools["swise_pools"]
+ self.uni_v3_pools = self.uni_v3_swise_pools.union(
+ self.uni_v3_staked_eth_pools
+ ).union(self.uni_v3_reward_eth_pools)
+ self.block_number = block_number
+ self.uni_v3_token = uni_v3_token
+ self.reward_token = reward_token
+ self.swise_holders = swise_holders
+
+ def is_supported_contract(self, contract_address: ChecksumAddress) -> bool:
+ """Checks whether the provided contract address is supported."""
+ return (
+ contract_address in self.uni_v3_pools
+ or contract_address == SWISE_TOKEN_CONTRACT_ADDRESS
+ )
+
+ @staticmethod
+ def add_value(
+ rewards: Rewards,
+ to: ChecksumAddress,
+ reward_token: ChecksumAddress,
+ amount: int,
+ ) -> None:
+ """Adds reward token to the beneficiary address."""
+ prev_amount = rewards.setdefault(to, {}).setdefault(reward_token, "0")
+ rewards[to][reward_token] = str(int(prev_amount) + amount)
+
+ @staticmethod
+ def merge_rewards(rewards1: Rewards, rewards2: Rewards) -> Rewards:
+ """Merges two dictionaries into one."""
+ merged_rewards: Rewards = copy.deepcopy(rewards1)
+ for account, account_rewards in rewards2.items():
+ for token, amount in account_rewards.items():
+ DistributorRewards.add_value(
+ rewards=merged_rewards,
+ to=account,
+ reward_token=token,
+ amount=int(amount),
+ )
+
+ return merged_rewards
+
+ async def get_rewards(
+ self, contract_address: ChecksumAddress, reward: int
+ ) -> Rewards:
+ """Calculates reward for every account recursively and aggregates amounts."""
+ if self.is_supported_contract(contract_address):
+ return await self._get_rewards(
+ contract_address=contract_address,
+ total_reward=reward,
+ visited={contract_address},
+ )
+
+ # unknown allocation -> assign to the rescue address
+ rewards: Rewards = {}
+ self.add_value(
+ rewards=rewards,
+ to=DISTRIBUTOR_FALLBACK_ADDRESS,
+ reward_token=self.reward_token,
+ amount=reward,
+ )
+
+ return rewards
+
+ async def get_balances(self, contract_address: ChecksumAddress) -> Balances:
+ """Fetches balances and total supply of the contract."""
+ if (
+ self.uni_v3_token == STAKED_ETH_TOKEN_CONTRACT_ADDRESS
+ and contract_address in self.uni_v3_staked_eth_pools
+ ):
+ logger.info(f"Fetching Uniswap V3 sETH2 balances: pool={contract_address}")
+ return await get_uniswap_v3_single_token_balances(
+ pool_address=contract_address,
+ token=STAKED_ETH_TOKEN_CONTRACT_ADDRESS,
+ block_number=self.block_number,
+ )
+ elif (
+ self.uni_v3_token == REWARD_ETH_TOKEN_CONTRACT_ADDRESS
+ and contract_address in self.uni_v3_reward_eth_pools
+ ):
+ logger.info(f"Fetching Uniswap V3 rETH2 balances: pool={contract_address}")
+ return await get_uniswap_v3_single_token_balances(
+ pool_address=contract_address,
+ token=REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ block_number=self.block_number,
+ )
+ elif (
+ self.uni_v3_token == SWISE_TOKEN_CONTRACT_ADDRESS
+ and contract_address in self.uni_v3_swise_pools
+ ):
+ logger.info(f"Fetching Uniswap V3 SWISE balances: pool={contract_address}")
+ return await get_uniswap_v3_single_token_balances(
+ pool_address=contract_address,
+ token=SWISE_TOKEN_CONTRACT_ADDRESS,
+ block_number=self.block_number,
+ )
+ elif contract_address in self.uni_v3_pools:
+ logger.info(
+ f"Fetching Uniswap V3 liquidity points: pool={contract_address}"
+ )
+ return await get_uniswap_v3_liquidity_points(
+ pool_address=contract_address,
+ block_number=self.block_number,
+ )
+ elif contract_address == SWISE_TOKEN_CONTRACT_ADDRESS:
+ logger.info("Distributing rewards to SWISE holders")
+ return self.swise_holders
+
+ raise ValueError(
+ f"Cannot get balances for unsupported contract address {contract_address}"
+ )
+
+ async def _get_rewards(
+ self,
+ contract_address: ChecksumAddress,
+ total_reward: int,
+ visited: Set[ChecksumAddress],
+ ) -> Rewards:
+ rewards: Rewards = {}
+
+ # fetch user balances and total supply for reward portions calculation
+ result = await self.get_balances(contract_address)
+ total_supply = result["total_supply"]
+ if total_supply <= 0:
+ # no recipients for the rewards -> assign reward to the rescue address
+ self.add_value(
+ rewards=rewards,
+ to=DISTRIBUTOR_FALLBACK_ADDRESS,
+ reward_token=self.reward_token,
+ amount=total_reward,
+ )
+ return rewards
+
+ balances = result["balances"]
+
+ # distribute rewards to the users or recurse for the supported contracts
+ total_distributed = 0
+ accounts: List[ChecksumAddress] = sorted(balances.keys())
+ last_account_index = len(accounts) - 1
+ for i, account in enumerate(accounts):
+ if i == last_account_index:
+ account_reward = total_reward - total_distributed
+ else:
+ balance = balances[account]
+ account_reward = (total_reward * balance) // total_supply
+
+ if account_reward <= 0:
+ continue
+
+ if account == contract_address or account in visited:
+ # failed to assign reward -> return it to rescue address
+ self.add_value(
+ rewards=rewards,
+ to=DISTRIBUTOR_FALLBACK_ADDRESS,
+ reward_token=self.reward_token,
+ amount=account_reward,
+ )
+ elif self.is_supported_contract(account):
+ # recurse into the supported contract
+ new_rewards = await self._get_rewards(
+ contract_address=account,
+ total_reward=account_reward,
+ visited=visited.union({account}),
+ )
+ rewards = self.merge_rewards(rewards, new_rewards)
+ else:
+ self.add_value(
+ rewards=rewards,
+ to=account,
+ reward_token=self.reward_token,
+ amount=account_reward,
+ )
+
+ total_distributed += account_reward
+
+ return rewards
diff --git a/src/distributor/types.py b/src/distributor/types.py
new file mode 100644
index 0000000..7fa1d2d
--- /dev/null
+++ b/src/distributor/types.py
@@ -0,0 +1,64 @@
+from typing import Dict, List, Set, TypedDict, Union
+
+from eth_typing import BlockNumber, ChecksumAddress, HexStr
+from web3.types import Wei
+
+
+class DistributorVotingParameters(TypedDict):
+ rewards_nonce: int
+ from_block: BlockNumber
+ to_block: BlockNumber
+ last_updated_at_block: BlockNumber
+ last_merkle_root: Union[None, HexStr]
+ last_merkle_proofs: Union[None, str]
+ protocol_reward: Wei
+ distributor_reward: Wei
+
+
+class Distribution(TypedDict):
+ contract: ChecksumAddress
+ block_number: BlockNumber
+ uni_v3_token: ChecksumAddress
+ reward_token: ChecksumAddress
+ # TODO: migrate to int if there will be tokens with more than 18 decimals
+ reward: Wei
+
+
+class TokenAllocation(TypedDict):
+ from_block: BlockNumber
+ to_block: BlockNumber
+ reward_token: ChecksumAddress
+ # TODO: migrate to int if there will be tokens with more than 18 decimals
+ reward: Wei
+
+
+class Balances(TypedDict):
+ total_supply: int
+ balances: Dict[ChecksumAddress, int]
+
+
+class Claim(TypedDict):
+ index: int
+ tokens: List[ChecksumAddress]
+ values: List[str]
+ proof: List[HexStr]
+
+
+class UniswapV3Pools(TypedDict):
+ staked_eth_pools: Set[ChecksumAddress]
+ reward_eth_pools: Set[ChecksumAddress]
+ swise_pools: Set[ChecksumAddress]
+
+
+class DistributorVote(TypedDict):
+ rewards_updated_at_block: int
+ nonce: int
+ merkle_root: HexStr
+ merkle_proofs: str
+
+
+TokenAllocations = Dict[ChecksumAddress, List[TokenAllocation]]
+Distributions = List[Distribution]
+ClaimedAccounts = Set[ChecksumAddress]
+Rewards = Dict[ChecksumAddress, Dict[ChecksumAddress, str]]
+Claims = Dict[ChecksumAddress, Claim]
diff --git a/src/distributor/uniswap_v3.py b/src/distributor/uniswap_v3.py
new file mode 100644
index 0000000..9910e87
--- /dev/null
+++ b/src/distributor/uniswap_v3.py
@@ -0,0 +1,499 @@
+from math import ceil, sqrt
+from typing import Dict
+
+import backoff
+from ens.constants import EMPTY_ADDR_HEX
+from eth_typing import BlockNumber, ChecksumAddress
+from web3 import Web3
+from web3.types import Wei
+
+from src.clients import execute_graphql_query, uniswap_v3_gql_client
+from src.graphql_queries import (
+ UNISWAP_V3_CURRENT_TICK_POSITIONS_QUERY,
+ UNISWAP_V3_POOL_QUERY,
+ UNISWAP_V3_POOLS_QUERY,
+ UNISWAP_V3_POSITIONS_QUERY,
+)
+from src.settings import (
+ REWARD_ETH_TOKEN_CONTRACT_ADDRESS,
+ STAKED_ETH_TOKEN_CONTRACT_ADDRESS,
+ SWISE_TOKEN_CONTRACT_ADDRESS,
+)
+
+from .types import (
+ Balances,
+ Distribution,
+ Distributions,
+ TokenAllocations,
+ UniswapV3Pools,
+)
+
+# NB! Changing BLOCKS_INTERVAL while distributions are still active can lead to invalid allocations
+BLOCKS_INTERVAL: int = 300
+MIN_TICK: int = -887272
+MAX_TICK: int = -MIN_TICK
+MAX_UINT_256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+Q32 = 2 ** 32
+Q96 = 2 ** 96
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_uniswap_v3_pools(block_number: BlockNumber) -> UniswapV3Pools:
+ """Fetches Uniswap V3 pools."""
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POOLS_QUERY,
+ variables=dict(block_number=block_number, last_id=last_id),
+ )
+ pools_chunk = result.get("pools", [])
+ pools = pools_chunk
+
+ # accumulate chunks of pools
+ while len(pools_chunk) >= 1000:
+ last_id = pools_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POOLS_QUERY,
+ variables=dict(block_number=block_number, last_id=last_id),
+ )
+ pools_chunk = result.get("pools", [])
+ pools.extend(pools_chunk)
+
+ uni_v3_pools = UniswapV3Pools(
+ staked_eth_pools=set(),
+ reward_eth_pools=set(),
+ swise_pools=set(),
+ )
+ for pool in pools:
+ pool_address = Web3.toChecksumAddress(pool["id"])
+ pool_token0 = Web3.toChecksumAddress(pool["token0"])
+ pool_token1 = Web3.toChecksumAddress(pool["token1"])
+ for pool_token in [pool_token0, pool_token1]:
+ if pool_token == STAKED_ETH_TOKEN_CONTRACT_ADDRESS:
+ uni_v3_pools["staked_eth_pools"].add(pool_address)
+ elif pool_token == REWARD_ETH_TOKEN_CONTRACT_ADDRESS:
+ uni_v3_pools["reward_eth_pools"].add(pool_address)
+ elif pool_token == SWISE_TOKEN_CONTRACT_ADDRESS:
+ uni_v3_pools["swise_pools"].add(pool_address)
+
+ return UniswapV3Pools(**uni_v3_pools)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_uniswap_v3_distributions(
+ pools: UniswapV3Pools,
+ active_allocations: TokenAllocations,
+ from_block: BlockNumber,
+ to_block: BlockNumber,
+) -> Distributions:
+ """Fetches Uniswap V3 pools and token distributions for them."""
+ all_pools = (
+ pools["staked_eth_pools"]
+ .union(pools["reward_eth_pools"])
+ .union(pools["swise_pools"])
+ )
+ if not active_allocations or not all_pools:
+ return []
+
+ distributions: Distributions = []
+ for pool_address in all_pools:
+ if pool_address not in active_allocations:
+ continue
+
+ pool_allocations = active_allocations[pool_address]
+ for allocation in pool_allocations:
+ alloc_from_block = allocation["from_block"]
+ alloc_to_block = allocation["to_block"]
+
+ total_blocks = alloc_to_block - alloc_from_block
+ if total_blocks <= 0:
+ continue
+
+ # calculate reward allocation for spread of `BLOCKS_INTERVAL`
+ total_reward = allocation["reward"]
+ reward_per_block = total_reward // total_blocks
+ interval_reward: Wei = Wei(reward_per_block * BLOCKS_INTERVAL)
+ start: BlockNumber = max(alloc_from_block, from_block)
+ end: BlockNumber = min(alloc_to_block, to_block)
+ while start != end:
+ if start + BLOCKS_INTERVAL > end:
+ interval = end - start
+ reward: Wei = Wei(reward_per_block * interval)
+ if end == alloc_to_block:
+ # collect left overs
+ reward += total_reward - (reward_per_block * total_blocks)
+
+ if reward > 0:
+ distribution = Distribution(
+ contract=pool_address,
+ block_number=BlockNumber(start + interval),
+ reward_token=allocation["reward_token"],
+ reward=reward,
+ uni_v3_token=EMPTY_ADDR_HEX,
+ )
+ distributions.append(distribution)
+ break
+
+ start += BLOCKS_INTERVAL
+ if interval_reward > 0:
+ distribution = Distribution(
+ contract=pool_address,
+ block_number=start,
+ reward_token=allocation["reward_token"],
+ reward=interval_reward,
+ uni_v3_token=EMPTY_ADDR_HEX,
+ )
+ distributions.append(distribution)
+
+ return distributions
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_uniswap_v3_liquidity_points(
+ pool_address: ChecksumAddress, block_number: BlockNumber
+) -> Balances:
+ """Fetches users' liquidity points of the Uniswap V3 pool in the current tick."""
+ lowered_pool_address = pool_address.lower()
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POOL_QUERY,
+ variables=dict(block_number=block_number, pool_address=lowered_pool_address),
+ )
+ pools = result.get("pools", [])
+ if not pools:
+ return Balances(total_supply=0, balances={})
+ pool = pools[0]
+
+ try:
+ tick_current: int = int(pool["tick"])
+ except TypeError:
+ return Balances(total_supply=0, balances={})
+
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_CURRENT_TICK_POSITIONS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ tick_current=tick_current,
+ pool_address=lowered_pool_address,
+ last_id=last_id,
+ ),
+ )
+ positions_chunk = result.get("positions", [])
+ positions = positions_chunk
+
+ # accumulate chunks of positions
+ while len(positions_chunk) >= 1000:
+ last_id = positions_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_CURRENT_TICK_POSITIONS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ tick_current=tick_current,
+ pool_address=lowered_pool_address,
+ last_id=last_id,
+ ),
+ )
+ positions_chunk = result.get("positions", [])
+ positions.extend(positions_chunk)
+
+ # process positions
+ balances: Dict[ChecksumAddress, int] = {}
+ total_supply = 0
+ for position in positions:
+ account = Web3.toChecksumAddress(position["owner"])
+ if account == EMPTY_ADDR_HEX:
+ continue
+
+ liquidity = int(position.get("liquidity", "0"))
+ if liquidity <= 0:
+ continue
+
+ balances[account] = balances.setdefault(account, 0) + liquidity
+
+ total_supply += liquidity
+
+ return Balances(total_supply=total_supply, balances=balances)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_uniswap_v3_single_token_balances(
+ pool_address: ChecksumAddress, token: ChecksumAddress, block_number: BlockNumber
+) -> Balances:
+ """Fetches users' single token balances of the Uniswap V3 pair across all the ticks."""
+ lowered_pool_address = pool_address.lower()
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POOL_QUERY,
+ variables=dict(block_number=block_number, pool_address=lowered_pool_address),
+ )
+ pools = result.get("pools", [])
+ if not pools:
+ return Balances(total_supply=0, balances={})
+ pool = pools[0]
+
+ try:
+ tick_current: int = int(pool["tick"])
+ except TypeError:
+ return Balances(total_supply=0, balances={})
+
+ sqrt_price: int = pool.get("sqrtPrice", "")
+ if not sqrt_price:
+ return Balances(total_supply=0, balances={})
+ sqrt_price = int(sqrt_price)
+
+ token0_address: ChecksumAddress = Web3.toChecksumAddress(pool["token0"])
+ token1_address: ChecksumAddress = Web3.toChecksumAddress(pool["token1"])
+
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POSITIONS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ pool_address=lowered_pool_address,
+ last_id=last_id,
+ ),
+ )
+ positions_chunk = result.get("positions", [])
+ positions = positions_chunk
+
+ # TODO: calculated earned fees
+
+ # accumulate chunks of positions
+ while len(positions_chunk) >= 1000:
+ last_id = positions_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=uniswap_v3_gql_client,
+ query=UNISWAP_V3_POSITIONS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ pool_address=lowered_pool_address,
+ last_id=last_id,
+ ),
+ )
+ positions_chunk = result.get("positions", [])
+ positions.extend(positions_chunk)
+
+ # process positions
+ balances: Dict[ChecksumAddress, Wei] = {}
+ total_supply: Wei = Wei(0)
+ for position in positions:
+ account = Web3.toChecksumAddress(position["owner"])
+ if account == EMPTY_ADDR_HEX:
+ continue
+
+ liquidity: int = int(position["liquidity"])
+ if liquidity <= 0:
+ continue
+
+ try:
+ tick_lower: int = int(position["tickLower"])
+ tick_upper: int = int(position["tickUpper"])
+ except TypeError:
+ continue
+
+ if token0_address == token:
+ token0_amount: Wei = Wei(
+ get_amount0(
+ tick_current=tick_current,
+ sqrt_ratio_x96=sqrt_price,
+ tick_lower=tick_lower,
+ tick_upper=tick_upper,
+ liquidity=liquidity,
+ )
+ )
+ balances[account] = Wei(
+ balances.setdefault(account, Wei(0)) + token0_amount
+ )
+ total_supply += token0_amount
+ elif token1_address == token:
+ token1_amount: Wei = Wei(
+ get_amount1(
+ tick_current=tick_current,
+ sqrt_ratio_x96=sqrt_price,
+ tick_lower=tick_lower,
+ tick_upper=tick_upper,
+ liquidity=liquidity,
+ )
+ )
+ balances[account] = Wei(
+ balances.setdefault(account, Wei(0)) + token1_amount
+ )
+ total_supply += token1_amount
+
+ return Balances(total_supply=total_supply, balances=balances)
+
+
+def get_amount0(
+ tick_current: int,
+ sqrt_ratio_x96: int,
+ tick_lower: int,
+ tick_upper: int,
+ liquidity: int,
+) -> int:
+ if tick_current < tick_lower:
+ return get_amount0_delta(
+ sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
+ sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
+ liquidity=liquidity,
+ round_up=False,
+ )
+ elif tick_current < tick_upper:
+ return get_amount0_delta(
+ sqrt_ratio_ax96=sqrt_ratio_x96,
+ sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
+ liquidity=liquidity,
+ round_up=False,
+ )
+
+ return 0
+
+
+def get_amount1(
+ tick_current: int,
+ sqrt_ratio_x96: int,
+ tick_lower: int,
+ tick_upper: int,
+ liquidity: int,
+) -> int:
+ if tick_current < tick_lower:
+ return 0
+ elif tick_current < tick_upper:
+ return get_amount1_delta(
+ sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
+ sqrt_ratio_bx96=sqrt_ratio_x96,
+ liquidity=liquidity,
+ round_up=False,
+ )
+
+ return get_amount1_delta(
+ sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
+ sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
+ liquidity=liquidity,
+ round_up=False,
+ )
+
+
+def get_amount0_delta(
+ sqrt_ratio_ax96: int, sqrt_ratio_bx96: int, liquidity: int, round_up: bool
+) -> int:
+ if sqrt_ratio_ax96 > sqrt_ratio_bx96:
+ sqrt_ratio_ax96, sqrt_ratio_bx96 = sqrt_ratio_bx96, sqrt_ratio_ax96
+
+ numerator1: int = liquidity << 96
+ numerator2: int = sqrt_ratio_bx96 - sqrt_ratio_ax96
+
+ if round_up:
+ return ceil(
+ (ceil((numerator1 * numerator2) / sqrt_ratio_bx96)) / sqrt_ratio_ax96
+ )
+ else:
+ return ((numerator1 * numerator2) // sqrt_ratio_bx96) // sqrt_ratio_ax96
+
+
+def get_amount1_delta(
+ sqrt_ratio_ax96: int, sqrt_ratio_bx96: int, liquidity: int, round_up: bool
+) -> int:
+ if sqrt_ratio_ax96 > sqrt_ratio_bx96:
+ sqrt_ratio_ax96, sqrt_ratio_bx96 = sqrt_ratio_bx96, sqrt_ratio_ax96
+
+ if round_up:
+ return ceil(liquidity * (sqrt_ratio_bx96 - sqrt_ratio_ax96) / Q96)
+ else:
+ return (liquidity * (sqrt_ratio_bx96 - sqrt_ratio_ax96)) // Q96
+
+
+def mul_shift(val: int, mul_by: int) -> int:
+ return (val * mul_by) >> 128
+
+
+def get_sqrt_ratio_at_tick(tick: int) -> int:
+ """
+ :param str tick: The tick for which to compute the sqrt ratio
+ :returns the sqrt ratio as a Q64.96 for the given tick. The sqrt ratio is computed as sqrt(1.0001)^tick
+ """
+ if not (MIN_TICK <= tick <= MAX_TICK and isinstance(tick, int)):
+ raise ValueError(f"Received invalid tick: {tick}")
+
+ if tick < 0:
+ abs_tick: int = tick * -1
+ else:
+ abs_tick: int = tick
+
+ if (abs_tick & 0x1) != 0:
+ ratio: int = 0xFFFCB933BD6FAD37AA2D162D1A594001
+ else:
+ ratio: int = 0x100000000000000000000000000000000
+
+ if (abs_tick & 0x2) != 0:
+ ratio = mul_shift(ratio, 0xFFF97272373D413259A46990580E213A)
+ if (abs_tick & 0x4) != 0:
+ ratio = mul_shift(ratio, 0xFFF2E50F5F656932EF12357CF3C7FDCC)
+ if (abs_tick & 0x8) != 0:
+ ratio = mul_shift(ratio, 0xFFE5CACA7E10E4E61C3624EAA0941CD0)
+ if (abs_tick & 0x10) != 0:
+ ratio = mul_shift(ratio, 0xFFCB9843D60F6159C9DB58835C926644)
+ if (abs_tick & 0x20) != 0:
+ ratio = mul_shift(ratio, 0xFF973B41FA98C081472E6896DFB254C0)
+ if (abs_tick & 0x40) != 0:
+ ratio = mul_shift(ratio, 0xFF2EA16466C96A3843EC78B326B52861)
+ if (abs_tick & 0x80) != 0:
+ ratio = mul_shift(ratio, 0xFE5DEE046A99A2A811C461F1969C3053)
+ if (abs_tick & 0x100) != 0:
+ ratio = mul_shift(ratio, 0xFCBE86C7900A88AEDCFFC83B479AA3A4)
+ if (abs_tick & 0x200) != 0:
+ ratio = mul_shift(ratio, 0xF987A7253AC413176F2B074CF7815E54)
+ if (abs_tick & 0x400) != 0:
+ ratio = mul_shift(ratio, 0xF3392B0822B70005940C7A398E4B70F3)
+ if (abs_tick & 0x800) != 0:
+ ratio = mul_shift(ratio, 0xE7159475A2C29B7443B29C7FA6E889D9)
+ if (abs_tick & 0x1000) != 0:
+ ratio = mul_shift(ratio, 0xD097F3BDFD2022B8845AD8F792AA5825)
+ if (abs_tick & 0x2000) != 0:
+ ratio = mul_shift(ratio, 0xA9F746462D870FDF8A65DC1F90E061E5)
+ if (abs_tick & 0x4000) != 0:
+ ratio = mul_shift(ratio, 0x70D869A156D2A1B890BB3DF62BAF32F7)
+ if (abs_tick & 0x8000) != 0:
+ ratio = mul_shift(ratio, 0x31BE135F97D08FD981231505542FCFA6)
+ if (abs_tick & 0x10000) != 0:
+ ratio = mul_shift(ratio, 0x9AA508B5B7A84E1C677DE54F3E99BC9)
+ if (abs_tick & 0x20000) != 0:
+ ratio = mul_shift(ratio, 0x5D6AF8DEDB81196699C329225EE604)
+ if (abs_tick & 0x40000) != 0:
+ ratio = mul_shift(ratio, 0x2216E584F5FA1EA926041BEDFE98)
+ if (abs_tick & 0x80000) != 0:
+ ratio = mul_shift(ratio, 0x48A170391F7DC42444E8FA2)
+
+ if tick > 0:
+ ratio = MAX_UINT_256 // ratio
+
+ # back to Q96
+ if (ratio % Q32) > 0:
+ return (ratio // Q32) + 1
+ else:
+ return ratio // Q32
+
+
+def encode_sqrt_ratio_x96(amount1: int, amount0: int) -> int:
+ """
+ :param int amount1: the numerator amount, i.e. amount of token1
+ :param int amount0: the denominator amount, i.e amount of token0
+ :returns the sqrt ratio as a Q64.96 corresponding to a given ratio of amount1 and amount0
+ """
+ numerator: int = amount1 << 192
+ denominator: int = amount0
+ ratio_x192: int = numerator // denominator
+ return int(sqrt(ratio_x192))
diff --git a/src/eth1.py b/src/eth1.py
new file mode 100644
index 0000000..594366d
--- /dev/null
+++ b/src/eth1.py
@@ -0,0 +1,136 @@
+import logging
+from typing import Dict, List, TypedDict
+
+import backoff
+from eth_account import Account
+from eth_account.signers.local import LocalAccount
+from web3 import Web3
+from web3.types import BlockNumber, Timestamp
+
+from .clients import execute_graphql_query, sw_gql_client
+from .distributor.types import DistributorVotingParameters
+from .graphql_queries import (
+ FINALIZED_BLOCK_QUERY,
+ ORACLE_QUERY,
+ VOTING_PARAMETERS_QUERY,
+)
+from .rewards.types import RewardsVotingParameters
+from .settings import ETH1_CONFIRMATION_BLOCKS, ORACLE_PRIVATE_KEY
+from .validators.types import (
+ FinalizeValidatorVotingParameters,
+ InitializeValidatorVotingParameters,
+)
+
+logger = logging.getLogger(__name__)
+
+oracle: LocalAccount = Account.from_key(ORACLE_PRIVATE_KEY)
+
+
+class FinalizedBlock(TypedDict):
+ block_number: BlockNumber
+ timestamp: Timestamp
+
+
+class VotingParameters(TypedDict):
+ rewards: RewardsVotingParameters
+ distributor: DistributorVotingParameters
+ initialize_validator: InitializeValidatorVotingParameters
+ finalize_validator: FinalizeValidatorVotingParameters
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_finalized_block() -> FinalizedBlock:
+ """Gets the finalized block number and its timestamp."""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=FINALIZED_BLOCK_QUERY,
+ variables=dict(
+ confirmation_blocks=ETH1_CONFIRMATION_BLOCKS,
+ ),
+ )
+ return FinalizedBlock(
+ block_number=BlockNumber(int(result["blocks"][0]["id"])),
+ timestamp=Timestamp(int(result["blocks"][0]["timestamp"])),
+ )
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_voting_parameters(block_number: BlockNumber) -> VotingParameters:
+ """Fetches rewards voting parameters."""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=VOTING_PARAMETERS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ ),
+ )
+ network = result["networks"][0]
+ distributor = result["merkleDistributors"][0]
+ reward_eth_token = result["rewardEthTokens"][0]
+ pool = result["pools"][0]
+
+ validators = result["validators"]
+ if validators:
+ operator = validators[0].get("operator", {}).get("id", None)
+ if operator is not None:
+ operator = Web3.toChecksumAddress(operator)
+ public_key = validators[0].get("id", None)
+ else:
+ operator = None
+ public_key = None
+
+ rewards = RewardsVotingParameters(
+ rewards_nonce=int(network["oraclesRewardsNonce"]),
+ rewards_updated_at_timestamp=Timestamp(
+ int(reward_eth_token["updatedAtTimestamp"])
+ ),
+ )
+ distributor = DistributorVotingParameters(
+ rewards_nonce=int(network["oraclesRewardsNonce"]),
+ from_block=BlockNumber(int(distributor["rewardsUpdatedAtBlock"])),
+ to_block=BlockNumber(int(reward_eth_token["updatedAtBlock"])),
+ last_updated_at_block=BlockNumber(int(distributor["updatedAtBlock"])),
+ last_merkle_root=distributor["merkleRoot"],
+ last_merkle_proofs=distributor["merkleProofs"],
+ protocol_reward=Web3.toWei(distributor["protocolPeriodReward"], "ether"),
+ distributor_reward=Web3.toWei(distributor["distributorPeriodReward"], "ether"),
+ )
+ initialize_validator = InitializeValidatorVotingParameters(
+ validator_index=int(pool["pendingValidators"])
+ + int(pool["activatedValidators"]),
+ validators_nonce=int(network["oraclesValidatorsNonce"]),
+ pool_balance=Web3.toWei(pool["balance"], "ether"),
+ )
+ finalize_validator = FinalizeValidatorVotingParameters(
+ validators_nonce=int(network["oraclesValidatorsNonce"]),
+ operator=operator,
+ public_key=public_key,
+ )
+ return VotingParameters(
+ rewards=rewards,
+ distributor=distributor,
+ initialize_validator=initialize_validator,
+ finalize_validator=finalize_validator,
+ )
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def check_oracle_account() -> None:
+ """Checks whether oracle is part of the oracles set."""
+ oracle_lowered_address = oracle.address.lower()
+ result: List = (
+ await execute_graphql_query(
+ client=sw_gql_client,
+ query=ORACLE_QUERY,
+ variables=dict(
+ oracle_address=oracle_lowered_address,
+ ),
+ )
+ ).get("oracles", [])
+ if result and result[0].get("id", "") == oracle_lowered_address:
+ logger.info(f"Oracle {oracle.address} is part of the oracles set")
+ else:
+ logger.warning(
+ f"NB! Oracle {oracle.address} is not part of the oracles set."
+ f" Please create DAO proposal to include it."
+ )
diff --git a/src/graphql_queries.py b/src/graphql_queries.py
new file mode 100644
index 0000000..1e07a80
--- /dev/null
+++ b/src/graphql_queries.py
@@ -0,0 +1,276 @@
+from gql import gql
+
+FINALIZED_BLOCK_QUERY = gql(
+ """
+ query getBlock($confirmation_blocks: Int) {
+ blocks(
+ skip: $confirmation_blocks
+ first: 1
+ orderBy: id
+ orderDirection: desc
+ ) {
+ id
+ timestamp
+ }
+ }
+"""
+)
+
+VOTING_PARAMETERS_QUERY = gql(
+ """
+ query getVotingParameters($block_number: Int) {
+ networks(block: { number: $block_number }) {
+ oraclesRewardsNonce
+ oraclesValidatorsNonce
+ }
+ pools(block: { number: $block_number }) {
+ pendingValidators
+ activatedValidators
+ balance
+ }
+ merkleDistributors(block: { number: $block_number }) {
+ merkleRoot
+ merkleProofs
+ updatedAtBlock
+ rewardsUpdatedAtBlock
+ }
+ rewardEthTokens(block: { number: $block_number }) {
+ distributorPeriodReward
+ protocolPeriodReward
+ updatedAtBlock
+ updatedAtTimestamp
+ }
+ validators(
+ block: { number: $block_number }
+ where: { registrationStatus: "Initialized" }
+ ) {
+ id
+ operator {
+ id
+ }
+ }
+ }
+"""
+)
+
+FINALIZED_VALIDATORS_QUERY = gql(
+ """
+ query getValidators($block_number: Int, $last_id: ID) {
+ validators(
+ block: { number: $block_number }
+ where: { registrationStatus: "Finalized", id_gt: $last_id }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ }
+ }
+"""
+)
+
+ORACLE_QUERY = gql(
+ """
+ query getOracles($oracle_address: ID) {
+ oracles(first: 1, where: {id: $oracle_address) {
+ id
+ }
+ }
+"""
+)
+
+DISABLED_STAKER_ACCOUNTS_QUERY = gql(
+ """
+ query getDisabledStakerAccounts($block_number: Int, $last_id: ID) {
+ rewardEthTokens(block: { number: $block_number }) {
+ rewardPerStakedEthToken
+ }
+ stakers(
+ block: { number: $block_number }
+ where: { id_gt: $last_id, rewardsDisabled: true }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ principalBalance
+ rewardPerStakedEthToken
+ }
+ }
+"""
+)
+
+ACTIVE_TOKEN_DISTRIBUTIONS_QUERY = gql(
+ """
+ query getTokenDistributions($from_block: Int, $to_block: Int, $last_id: ID) {
+ tokenDistributions(
+ where: {
+ id_gt: $last_id
+ startedAtBlock_lt: $to_block
+ endedAtBlock_gt: $from_block
+ }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ token
+ beneficiary
+ amount
+ startedAtBlock
+ endedAtBlock
+ }
+ }
+"""
+)
+
+UNISWAP_V3_POOLS_QUERY = gql(
+ """
+ query getUniswapV3Pools($block_number: Int, $last_id: ID) {
+ pools(
+ block: { number: $block_number }
+ where: { id_gt: $last_id }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ token0
+ token1
+ }
+ }
+"""
+)
+
+UNISWAP_V3_POOL_QUERY = gql(
+ """
+ query getUniswapV3Pool($pool_address: ID, $block_number: Int) {
+ pools(
+ block: { number: $block_number }
+ where: { id: $pool_address }
+ ) {
+ tick
+ sqrtPrice
+ token0
+ token1
+ }
+ }
+"""
+)
+
+UNISWAP_V3_CURRENT_TICK_POSITIONS_QUERY = gql(
+ """
+ query getPositions(
+ $block_number: Int
+ $tick_current: BigInt
+ $pool_address: String
+ $last_id: ID
+ ) {
+ positions(
+ block: { number: $block_number }
+ where: {
+ tickLower_lte: $tick_current
+ tickUpper_gt: $tick_current
+ pool: $pool_address
+ id_gt: $last_id
+ }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ owner
+ liquidity
+ }
+ }
+"""
+)
+
+UNISWAP_V3_POSITIONS_QUERY = gql(
+ """
+ query getPositions(
+ $block_number: Int
+ $pool_address: String
+ $last_id: ID
+ ) {
+ positions(
+ block: { number: $block_number }
+ where: { pool: $pool_address, id_gt: $last_id }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ owner
+ liquidity
+ tickLower
+ tickUpper
+ }
+ }
+"""
+)
+
+DISTRIBUTOR_CLAIMED_ACCOUNTS_QUERY = gql(
+ """
+ query getDistributorClaims($merkle_root: String, $last_id: ID) {
+ merkleDistributorClaims(
+ where: { merkleRoot: $merkle_root, id_gt: $last_id }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ account
+ }
+ }
+"""
+)
+
+SWISE_HOLDERS_QUERY = gql(
+ """
+ query getSwiseHolders($block_number: Int, $last_id: ID) {
+ stakeWiseTokenHolders(
+ block: { number: $block_number }
+ where: { id_gt: $last_id }
+ first: 1000
+ orderBy: id
+ orderDirection: asc
+ ) {
+ id
+ balance
+ holdingPoints
+ updatedAtBlock
+ }
+ }
+"""
+)
+
+OPERATORS_QUERY = gql(
+ """
+ query getOperators($block_number: Int) {
+ operators(
+ block: { number: $block_number }
+ orderBy: validatorsCount
+ orderDirection: asc
+ ) {
+ id
+ validatorsCount
+ initializeMerkleProofs
+ depositDataIndex
+ }
+ }
+"""
+)
+
+VALIDATOR_REGISTRATIONS_QUERY = gql(
+ """
+ query getValidatorRegistrations($block_number: Int, public_key: Bytes) {
+ validatorRegistrations(
+ block: { number: $block_number }
+ where: { id: $public_key }
+ ) {
+ withdrawalCredentials
+ }
+ }
+"""
+)
diff --git a/src/ipfs.py b/src/ipfs.py
new file mode 100644
index 0000000..e698f92
--- /dev/null
+++ b/src/ipfs.py
@@ -0,0 +1,150 @@
+import logging
+from typing import TypedDict, Union
+
+import backoff
+import ipfshttpclient
+from eth_account.messages import encode_defunct
+from web3 import Web3
+
+from .distributor.types import DistributorVote
+from .eth1 import oracle
+from .rewards.types import RewardsVote
+from .settings import IPFS_ENDPOINT, KEEPER_ORACLES_SOURCE_URL
+from .validators.types import ValidatorVote
+
+logger = logging.getLogger(__name__)
+
+IPNS_REWARDS_KEY_NAME = "sw-rewards-key"
+IPNS_DISTRIBUTOR_KEY_NAME = "sw-distributor-key"
+IPNS_VALIDATOR_INITIALIZE_KEY_NAME = "sw-validator-initialize-key"
+IPNS_VALIDATOR_FINALIZE_KEY_NAME = "sw-validator-finalize-key"
+
+
+class IPNSRecord(TypedDict):
+ ipfs_id: str
+ ipns_id: str
+
+
+class IPNSKeys(TypedDict):
+ rewards_key_id: str
+ distributor_key_id: str
+ validator_initialize_key_id: str
+ validator_finalize_key_id: str
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def check_or_create_ipns_keys() -> IPNSKeys:
+ """Checks whether IPNS ID for rewards already exists or creates a new one."""
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ keys = client.key.list()["Keys"]
+ rewards_key_id = None
+ distributor_key_id = None
+ validator_initialize_key_id = None
+ validator_finalize_key_id = None
+ for key in keys:
+ name = key.get("Name", "")
+ if name == IPNS_REWARDS_KEY_NAME:
+ rewards_key_id = key["Id"]
+ elif name == IPNS_DISTRIBUTOR_KEY_NAME:
+ distributor_key_id = key["Id"]
+ elif name == IPNS_VALIDATOR_INITIALIZE_KEY_NAME:
+ validator_initialize_key_id = key["Id"]
+ elif name == IPNS_VALIDATOR_FINALIZE_KEY_NAME:
+ validator_finalize_key_id = key["Id"]
+
+ if rewards_key_id is not None:
+ logger.info(
+ f"IPNS keys for rewards exists:"
+ f" name={IPNS_REWARDS_KEY_NAME}, ID={rewards_key_id}"
+ )
+ else:
+ new_key = client.key.gen(IPNS_REWARDS_KEY_NAME, "ed25519")
+ rewards_key_id = new_key["Id"]
+ logger.info(
+ f'Generated new IPNS key for rewards: name={new_key["Name"]}, ID={new_key["Id"]}'
+ )
+
+ if distributor_key_id is not None:
+ logger.info(
+ f"IPNS keys for distributor exists:"
+ f" name={IPNS_DISTRIBUTOR_KEY_NAME}, ID={distributor_key_id}"
+ )
+ else:
+ new_key = client.key.gen(IPNS_DISTRIBUTOR_KEY_NAME, "ed25519")
+ distributor_key_id = new_key["Id"]
+ logger.info(
+ f'Generated new IPNS key for distributor: name={new_key["Name"]}, ID={new_key["Id"]}'
+ )
+
+ if validator_initialize_key_id is not None:
+ logger.info(
+ f"IPNS keys for initializing validator exists:"
+ f" name={IPNS_VALIDATOR_INITIALIZE_KEY_NAME}, ID={validator_initialize_key_id}"
+ )
+ else:
+ new_key = client.key.gen(IPNS_VALIDATOR_INITIALIZE_KEY_NAME, "ed25519")
+ validator_initialize_key_id = new_key["Id"]
+ logger.info(
+ f"Generated new IPNS key for initializing validators:"
+ f' name={new_key["Name"]},'
+ f' ID={new_key["Id"]}'
+ )
+
+ if validator_finalize_key_id is not None:
+ logger.info(
+ f"IPNS keys for finalizing validator exists:"
+ f" name={IPNS_VALIDATOR_FINALIZE_KEY_NAME}, ID={validator_finalize_key_id}"
+ )
+ else:
+ new_key = client.key.gen(IPNS_VALIDATOR_FINALIZE_KEY_NAME, "ed25519")
+ validator_finalize_key_id = new_key["Id"]
+ logger.info(
+ f'Generated new IPNS key for finalizing validators: name={new_key["Name"]}, ID={new_key["Id"]}'
+ )
+
+ logger.info(
+ f"NB! The keeper must be aware of the IPNS IDs to aggregate the votes from your oracle."
+ f" Please update {KEEPER_ORACLES_SOURCE_URL} with"
+ f" oracle address={oracle.address} and IPNS IDs from the above"
+ )
+
+ return IPNSKeys(
+ rewards_key_id=rewards_key_id,
+ distributor_key_id=distributor_key_id,
+ validator_initialize_key_id=validator_initialize_key_id,
+ validator_finalize_key_id=validator_finalize_key_id,
+ )
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def submit_ipns_vote(
+ encoded_data: bytes,
+ vote: Union[RewardsVote, DistributorVote, ValidatorVote],
+ key_id: Union[
+ IPNS_REWARDS_KEY_NAME,
+ IPNS_DISTRIBUTOR_KEY_NAME,
+ IPNS_VALIDATOR_INITIALIZE_KEY_NAME,
+ IPNS_VALIDATOR_FINALIZE_KEY_NAME,
+ ],
+) -> IPNSRecord:
+ """Submits vote to the IPFS and publishes to the IPNS."""
+ # generate candidate ID
+ candidate_id: bytes = Web3.keccak(primitive=encoded_data)
+ message = encode_defunct(primitive=candidate_id)
+ signed_message = oracle.sign_message(message)
+ vote["signature"] = signed_message.signature.hex()
+
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ ipfs_id = client.add_json(vote)
+ client.pin.add(ipfs_id)
+ ipns_id = client.name.publish(ipfs_path=ipfs_id, lifetime="72h", key=key_id)[
+ "Name"
+ ]
+
+ if not ipfs_id.startswith("/ipfs/"):
+ ipfs_id = "/ipfs/" + ipfs_id
+
+ if not ipns_id.startswith("/ipns/"):
+ ipns_id = "/ipns/" + ipns_id
+
+ return IPNSRecord(ipfs_id=ipfs_id, ipns_id=ipns_id)
diff --git a/src/merkle_distributor/distribution_tree.py b/src/merkle_distributor/distribution_tree.py
deleted file mode 100644
index 11553ab..0000000
--- a/src/merkle_distributor/distribution_tree.py
+++ /dev/null
@@ -1,354 +0,0 @@
-import copy
-
-import logging
-from cachetools.func import lru_cache
-from eth_typing import BlockNumber, HexStr, ChecksumAddress
-from typing import Tuple, List, Dict, Set
-from web3 import Web3
-from web3.contract import Contract
-from web3.types import Wei
-
-from contracts import get_erc20_contract
-from src.merkle_distributor.utils import (
- Distribution,
- get_balancer_vault_pool_shares,
- get_balancer_pool_balances,
- get_uniswap_v2_balances,
- get_uniswap_v3_balances,
- get_reward_eth_token_balances,
- get_erc20_token_balances,
- OraclesSettings,
- Rewards,
- get_uniswap_v3_staked_eth_balances,
- get_uniswap_v3_full_range_balances
-)
-
-logger = logging.getLogger(__name__)
-
-BLOCKS_IN_YEAR = 2427458
-
-
-class DistributionTree(object):
- def __init__(
- self,
- reward_eth_token: Contract,
- staked_eth_token: Contract,
- multicall_contract: Contract,
- balancer_subgraph_url: str,
- uniswap_v2_subgraph_url: str,
- uniswap_v3_subgraph_url: str,
- balancer_vault_address: ChecksumAddress,
- dao_address: ChecksumAddress,
- oracles_settings: OraclesSettings,
- ):
- self.w3 = reward_eth_token.web3
- self.reward_eth_token = reward_eth_token
- self.staked_eth_token = staked_eth_token
- self.reward_eth_token_address = Web3.toChecksumAddress(reward_eth_token.address)
- self.staked_eth_token_address = Web3.toChecksumAddress(staked_eth_token.address)
- self.multicall_contract = multicall_contract
- self.dao_address = Web3.toChecksumAddress(dao_address)
-
- # balancer
- self.balancer_subgraph_url = balancer_subgraph_url
- self.balancer_vault_address = Web3.toChecksumAddress(balancer_vault_address)
-
- # uniswap
- self.uniswap_v2_subgraph_url = uniswap_v2_subgraph_url
- self.uniswap_v3_subgraph_url = uniswap_v3_subgraph_url
-
- # extract settings
- self.balancer_staked_eth_pool_ids: Set[HexStr] = oracles_settings[
- "balancer_staked_eth_pool_ids"
- ]
- self.balancer_pools: Dict[ChecksumAddress, HexStr] = oracles_settings[
- "balancer_pools"
- ]
- self.uniswap_v2_pairs: Set[ChecksumAddress] = oracles_settings[
- "uniswap_v2_pairs"
- ]
- self.uniswap_v3_pairs: Set[ChecksumAddress] = oracles_settings[
- "uniswap_v3_pairs"
- ]
- self.uniswap_v3_staked_eth_pairs: Set[ChecksumAddress] = oracles_settings[
- "uniswap_v3_staked_eth_pairs"
- ]
- self.uniswap_v3_full_range_pairs: Set[ChecksumAddress] = oracles_settings[
- "uniswap_v3_full_range_pairs"
- ]
- self.erc20_tokens: Dict[ChecksumAddress, BlockNumber] = oracles_settings[
- "erc20_tokens"
- ]
-
- def merge_rewards(self, rewards1: Rewards, rewards2: Rewards) -> Rewards:
- """Merges two dictionaries into one."""
- merged_rewards: Rewards = copy.deepcopy(rewards1)
- for account, account_rewards in rewards2.items():
- for reward_token, rewards in account_rewards.items():
- for origin, value in rewards.items():
- self.add_value(
- rewards=merged_rewards,
- to=account,
- origin=origin,
- reward_token=reward_token,
- value=Wei(int(value)),
- )
-
- return merged_rewards
-
- def add_value(
- self,
- rewards: Rewards,
- to: ChecksumAddress,
- origin: ChecksumAddress,
- reward_token: ChecksumAddress,
- value: Wei,
- ) -> None:
- """Adds reward tokens to the receiver address."""
- if self.is_supported_contract(to):
- raise ValueError(f"Invalid to address: {to}")
-
- prev_amount = (
- rewards.setdefault(to, {})
- .setdefault(reward_token, {})
- .setdefault(origin, "0")
- )
- rewards[to][reward_token][origin] = str(int(prev_amount) + value)
-
- def calculate_balancer_staked_eth_rewards(
- self, block_number: BlockNumber, vault_reward: Wei
- ) -> Dict[ChecksumAddress, Wei]:
- """Calculates rETH2 rewards for supported staked eth token pools in Balancer v2."""
- # fetch pool shares
- pool_shares: Dict[ChecksumAddress, Wei] = get_balancer_vault_pool_shares(
- subgraph_url=self.balancer_subgraph_url,
- token_address=self.staked_eth_token_address,
- pool_ids=self.balancer_staked_eth_pool_ids,
- block_number=block_number,
- )
-
- # calculates rewards portion for every supported staked eth balancer pool
- rewards: Dict[ChecksumAddress, Wei] = {}
- total_staked_eth_balance: Wei = sum(pool_shares.values())
- distributed: Wei = Wei(0)
- pool_addresses = sorted(pool_shares.keys())
- for pool_address in pool_addresses:
- pool_balance: Wei = Wei(int(pool_shares[pool_address]))
- if pool_address == pool_addresses[-1]:
- reward: Wei = Wei(vault_reward - distributed)
- else:
- reward: Wei = Wei(
- vault_reward * pool_balance // total_staked_eth_balance
- )
-
- if reward <= 0:
- continue
-
- distributed += reward
- rewards[pool_address] = reward
-
- return rewards
-
- def is_supported_contract(self, contract_address: ChecksumAddress) -> bool:
- """Checks whether the provided contract address is supported."""
- return (
- contract_address in self.balancer_pools
- or contract_address in self.uniswap_v2_pairs
- or contract_address in self.uniswap_v3_pairs
- or contract_address in self.uniswap_v3_full_range_pairs
- or contract_address == self.reward_eth_token_address
- or contract_address in self.erc20_tokens
- )
-
- def calculate_rewards(
- self, block_number: BlockNumber, distributions: List[Distribution]
- ) -> Rewards:
- """Calculates reward for every account recursively and aggregates amounts."""
- rewards: Rewards = Rewards({})
- for dist in distributions:
- (origin, reward_token, value) = dist
- if (
- origin == self.balancer_vault_address
- and reward_token == self.reward_eth_token_address
- ):
- # handle special case for Balancer v2 pools and rETH2 distribution
- balancer_pool_rewards: Dict[
- ChecksumAddress, Wei
- ] = self.calculate_balancer_staked_eth_rewards(
- block_number=block_number, vault_reward=value
- )
- for pool_address, pool_reward in balancer_pool_rewards.items():
- new_rewards = self._calculate_contract_rewards(
- block_number=block_number,
- origin=pool_address,
- reward_token=reward_token,
- total_reward=pool_reward,
- visited={origin, pool_address},
- )
- rewards = self.merge_rewards(rewards, new_rewards)
- elif self.is_supported_contract(origin):
- # calculate reward based on the contract balances
- new_rewards = self._calculate_contract_rewards(
- block_number=block_number,
- origin=origin,
- reward_token=reward_token,
- total_reward=value,
- visited={origin},
- )
- rewards = self.merge_rewards(rewards, new_rewards)
- else:
- raise ValueError(
- f"Failed to process distribution:"
- f" source={origin},"
- f" reward token={reward_token},"
- f" value={value},"
- f" block number={block_number}"
- )
-
- return rewards
-
- @lru_cache
- def get_balances(
- self,
- block_number: BlockNumber,
- contract_address: ChecksumAddress,
- reward_token: ChecksumAddress,
- ) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches balances and total supply of the contract."""
- if contract_address in self.balancer_pools:
- logger.info(f"Fetching Balancer V2 balances: pool={contract_address}")
- return get_balancer_pool_balances(
- subgraph_url=self.balancer_subgraph_url,
- pool_id=self.balancer_pools[contract_address],
- block_number=block_number,
- )
- elif contract_address in self.uniswap_v2_pairs:
- logger.info(f"Fetching Uniswap V2 balances: pool={contract_address}")
- return get_uniswap_v2_balances(
- subgraph_url=self.uniswap_v2_subgraph_url,
- pair_address=contract_address,
- block_number=block_number,
- )
- elif (
- contract_address in self.uniswap_v3_staked_eth_pairs
- and reward_token == self.reward_eth_token_address
- ):
- logger.info(
- f"Fetching Uniswap V3 staked eth balances: pool={contract_address}"
- )
- return get_uniswap_v3_staked_eth_balances(
- subgraph_url=self.uniswap_v3_subgraph_url,
- pool_address=contract_address,
- staked_eth_token_address=self.staked_eth_token_address,
- to_block=block_number,
- )
- elif contract_address in self.uniswap_v3_full_range_pairs:
- logger.info(f"Fetching Uniswap V3 infinity positions balances: pool={contract_address}")
- return get_uniswap_v3_full_range_balances(
- subgraph_url=self.uniswap_v3_subgraph_url,
- pool_address=contract_address,
- to_block=block_number,
- )
- elif contract_address in self.uniswap_v3_pairs:
- logger.info(f"Fetching Uniswap V3 balances: pool={contract_address}")
- return get_uniswap_v3_balances(
- subgraph_url=self.uniswap_v3_subgraph_url,
- pool_address=contract_address,
- to_block=block_number,
- )
- elif contract_address == self.reward_eth_token_address:
- logger.info("Fetching Reward ETH Token balances")
- return get_reward_eth_token_balances(
- reward_eth_token=self.reward_eth_token,
- staked_eth_token=self.staked_eth_token,
- multicall=self.multicall_contract,
- from_block=self.erc20_tokens[
- Web3.toChecksumAddress(self.staked_eth_token.address)
- ],
- to_block=block_number,
- )
- elif contract_address in self.erc20_tokens:
- logger.info(f"Fetching ERC-20 token balances: token={contract_address}")
- contract = get_erc20_contract(
- w3=self.w3, contract_address=Web3.toChecksumAddress(contract_address)
- )
- return get_erc20_token_balances(
- token=contract,
- start_block=self.erc20_tokens[contract_address],
- end_block=block_number,
- )
-
- raise ValueError(
- f"Cannot get balances for unsupported contract address {contract_address}"
- )
-
- def _calculate_contract_rewards(
- self,
- block_number: BlockNumber,
- origin: ChecksumAddress,
- reward_token: ChecksumAddress,
- total_reward: Wei,
- visited: Set[ChecksumAddress],
- ) -> Rewards:
- rewards: Rewards = Rewards({})
-
- # fetch user balances and total supply for calculation reward portions
- balances, total_supply = self.get_balances(
- block_number=block_number,
- contract_address=origin,
- reward_token=reward_token,
- )
- if total_supply <= 0:
- # no recipients for the rewards -> assign reward to the DAO
- self.add_value(
- rewards=rewards,
- to=self.dao_address,
- origin=origin,
- reward_token=reward_token,
- value=total_reward,
- )
- return rewards
-
- # distribute rewards to the users or recurse for the support contracts
- total_distributed: Wei = Wei(0)
- accounts: List[ChecksumAddress] = sorted(balances.keys())
- for account in accounts:
- if account == accounts[-1]:
- account_reward: Wei = Wei(total_reward - total_distributed)
- else:
- balance: Wei = balances[account]
- account_reward: Wei = Wei((total_reward * balance) // total_supply)
-
- if account_reward <= 0:
- continue
-
- if account == origin or account in visited:
- # failed to assign reward -> return it to DAO
- self.add_value(
- rewards=rewards,
- to=self.dao_address,
- origin=origin,
- reward_token=reward_token,
- value=account_reward,
- )
- elif self.is_supported_contract(account):
- new_rewards = self._calculate_contract_rewards(
- block_number=block_number,
- origin=account,
- reward_token=reward_token,
- total_reward=account_reward,
- visited=visited.union({account}),
- )
- rewards = self.merge_rewards(rewards, new_rewards)
- else:
- self.add_value(
- rewards=rewards,
- to=account,
- origin=origin,
- reward_token=reward_token,
- value=account_reward,
- )
-
- total_distributed += account_reward
-
- return rewards
diff --git a/src/merkle_distributor/distributor.py b/src/merkle_distributor/distributor.py
deleted file mode 100644
index 964a889..0000000
--- a/src/merkle_distributor/distributor.py
+++ /dev/null
@@ -1,398 +0,0 @@
-from collections import OrderedDict
-
-import logging
-from eth_typing import HexStr, ChecksumAddress
-from typing import Set, Dict, List
-from web3 import Web3
-from web3.types import Wei, BlockNumber
-
-from contracts import (
- get_oracles_contract,
- get_reward_eth_contract,
- get_staked_eth_contract,
- get_multicall_contract,
- get_merkle_distributor_contract,
- get_ens_resolver_contract,
-)
-from src.merkle_distributor.distribution_tree import DistributionTree
-from src.merkle_distributor.merkle_tree import MerkleTree
-from src.merkle_distributor.utils import (
- get_merkle_root_voting_parameters,
- get_reth_disabled_accounts,
- get_prev_merkle_root_parameters,
- get_merkle_distributor_claimed_addresses,
- get_unclaimed_balances,
- get_distributions,
- get_oracles_config,
- get_staked_eth_period_reward,
- Distribution,
- get_staked_eth_distributions,
- get_ens_node_id,
- OraclesSettings,
- get_merkle_node,
- pin_claims_to_ipfs,
- submit_oracle_merkle_root_vote,
- Rewards,
-)
-from src.settings import (
- ETH1_CONFIRMATION_BLOCKS,
- REWARD_ETH_CONTRACT_ADDRESS,
- BALANCER_VAULT_CONTRACT_ADDRESS,
- DAO_ENS_DOMAIN,
- ORACLES_ENS_TEXT_RECORD,
- IPFS_ENDPOINT,
- DAO_ADDRESS,
- BALANCER_SUBGRAPH_URL,
- UNISWAP_V2_SUBGRAPH_URL,
- UNISWAP_V3_SUBGRAPH_URL,
- TRANSACTION_TIMEOUT,
- ORACLE_VOTE_GAS_LIMIT,
- VOTING_TIMEOUT,
- SEND_TELEGRAM_NOTIFICATIONS,
- BALANCE_WARNING_THRESHOLD,
- BALANCE_ERROR_THRESHOLD,
-)
-from src.utils import (
- get_latest_block_number,
- check_oracle_has_vote,
- wait_for_oracles_nonce_update,
- check_default_account_balance,
-)
-
-logger = logging.getLogger(__name__)
-
-
-class Distributor(object):
- """Submits update to MerkleDistributor contract and uploads merkle proofs to IPFS."""
-
- def __init__(self, w3: Web3) -> None:
- self.w3 = w3
-
- self.reward_eth_token = get_reward_eth_contract(w3)
- logger.info(
- f"Reward ETH Token contract address: {self.reward_eth_token.address}"
- )
-
- self.staked_eth_token = get_staked_eth_contract(w3)
- logger.info(
- f"Staked ETH Token contract address: {self.staked_eth_token.address}"
- )
-
- self.multicall_contract = get_multicall_contract(w3)
- logger.info(f"Multicall contract address: {self.multicall_contract.address}")
-
- self.oracles = get_oracles_contract(w3)
- logger.info(f"Oracles contract address: {self.oracles.address}")
-
- self.merkle_distributor = get_merkle_distributor_contract(w3)
- logger.info(
- f"Merkle Distributor contract address: {self.merkle_distributor.address}"
- )
-
- self.ens_resolver = get_ens_resolver_contract(w3)
- logger.info(f"ENS resolver contract address: {self.ens_resolver.address}")
-
- self.ens_node_id: bytes = get_ens_node_id(DAO_ENS_DOMAIN)
- logger.info(f"Using DAO ENS domain: {DAO_ENS_DOMAIN}")
-
- self.skipped_rewards_block_number: BlockNumber = BlockNumber(0)
-
- def process(self) -> None:
- """Submits merkle root for rewards distribution and updates IPFS proofs."""
-
- # fetch current block number adjusted based on the number of confirmation blocks
- current_block_number: BlockNumber = get_latest_block_number(
- w3=self.w3, confirmation_blocks=ETH1_CONFIRMATION_BLOCKS
- )
-
- # fetch voting parameters
- (
- is_voting,
- is_paused,
- current_nonce,
- new_rewards_block_number,
- ) = get_merkle_root_voting_parameters(
- oracles=self.oracles,
- multicall=self.multicall_contract,
- reward_eth_token=self.reward_eth_token,
- block_number=current_block_number,
- )
-
- # check whether it's voting time
- if (
- not is_voting
- or new_rewards_block_number == self.skipped_rewards_block_number
- ):
- return
-
- if is_paused:
- logger.info("Skipping merkle root update as Oracles contract is paused")
- return
-
- logger.info(
- f"Checking Merkle Distributor rewards up to {new_rewards_block_number} block"
- )
-
- # fetch previous merkle update parameters
- # NB! can be `None` if it's the first update
- prev_merkle_root_parameters = get_prev_merkle_root_parameters(
- merkle_distributor=self.merkle_distributor,
- reward_eth_token=self.reward_eth_token,
- to_block=new_rewards_block_number,
- )
-
- # use rewards update block number at the time of last merkle distribution as a starting block
- if prev_merkle_root_parameters is None:
- # it's the first merkle root update
- prev_merkle_root_update_block_number: BlockNumber = BlockNumber(0)
- prev_merkle_root_rewards_update_block_number: BlockNumber = BlockNumber(0)
- logger.warning("Executing first Merkle Distributor update")
- else:
- prev_merkle_root_update_block_number: BlockNumber = (
- prev_merkle_root_parameters[2]
- )
- prev_merkle_root_rewards_update_block_number: BlockNumber = (
- prev_merkle_root_parameters[3]
- )
- logger.info(
- f"Merkle root previous voting block numbers:"
- f" total rewards={prev_merkle_root_rewards_update_block_number},"
- f" merkle root={prev_merkle_root_update_block_number}"
- )
-
- # calculate staked eth period reward
- staked_eth_period_reward: Wei = get_staked_eth_period_reward(
- reward_eth_token=self.reward_eth_token,
- new_rewards_block_number=new_rewards_block_number,
- prev_merkle_root_update_block_number=prev_merkle_root_update_block_number,
- prev_merkle_root_staking_rewards_update_block_number=prev_merkle_root_rewards_update_block_number,
- )
- logger.info(
- f"Calculated Merkle Distributor staked ETH period reward:"
- f" {Web3.fromWei(staked_eth_period_reward, 'ether')} ETH"
- )
-
- # calculated staked eth reward distributions
- if staked_eth_period_reward <= 0:
- # no period rewards
- staked_eth_distributions: List[Distribution] = []
- logger.warning("No Staked ETH distributions")
- else:
- # fetch accounts that have rETH2 distributions disabled
- reth_disabled_accounts: Set[ChecksumAddress] = get_reth_disabled_accounts(
- reward_eth_token=self.reward_eth_token,
- to_block=new_rewards_block_number,
- )
- staked_eth_distributions: List[Distribution] = get_staked_eth_distributions(
- staked_eth_token=self.staked_eth_token,
- multicall=self.multicall_contract,
- reward_eth_token_address=REWARD_ETH_CONTRACT_ADDRESS,
- reth_disabled_accounts=list(reth_disabled_accounts),
- staked_eth_period_reward=staked_eth_period_reward,
- new_rewards_block_number=new_rewards_block_number,
- )
-
- # fetch oracles configuration from the ENS record
- oracles_settings: OraclesSettings = get_oracles_config(
- node_id=self.ens_node_id,
- ens_resolver=self.ens_resolver,
- ens_text_record=ORACLES_ENS_TEXT_RECORD,
- ipfs_endpoint=IPFS_ENDPOINT,
- )
-
- # calculate block distributions of additional reward tokens
- block_distributions: Dict[BlockNumber, List[Distribution]] = get_distributions(
- merkle_distributor=self.merkle_distributor,
- distribution_start_block=prev_merkle_root_rewards_update_block_number,
- distribution_end_block=new_rewards_block_number,
- blocks_interval=oracles_settings["snapshot_interval_in_blocks"],
- )
-
- # add staked eth distributions
- if staked_eth_distributions:
- block_distributions.setdefault(new_rewards_block_number, []).extend(
- staked_eth_distributions
- )
-
- if not block_distributions and prev_merkle_root_parameters is not None:
- # the rewards distributions has not change, update with the previous merkle root parameters
- # to re-enable claiming for the users
- logger.warning("Voting for the same merkle root: no block distributions")
- self.vote_for_merkle_root(
- current_block_number=current_block_number,
- current_nonce=current_nonce,
- merkle_root=prev_merkle_root_parameters[0],
- merkle_proofs=prev_merkle_root_parameters[1],
- )
- return
- elif not block_distributions:
- logger.warning(
- f"Skipping merkle root update: no block distributions"
- f" after rewards update with block number={new_rewards_block_number}"
- )
- self.skipped_rewards_block_number = new_rewards_block_number
- return
-
- # calculate final rewards through the distribution tree
- tree = DistributionTree(
- reward_eth_token=self.reward_eth_token,
- staked_eth_token=self.staked_eth_token,
- multicall_contract=self.multicall_contract,
- balancer_subgraph_url=BALANCER_SUBGRAPH_URL,
- uniswap_v2_subgraph_url=UNISWAP_V2_SUBGRAPH_URL,
- uniswap_v3_subgraph_url=UNISWAP_V3_SUBGRAPH_URL,
- balancer_vault_address=BALANCER_VAULT_CONTRACT_ADDRESS,
- dao_address=DAO_ADDRESS,
- oracles_settings=oracles_settings,
- )
- final_rewards: Rewards = Rewards({})
- for block_number, dist in block_distributions.items():
- logger.info(
- f"Calculating reward distributions: block number={block_number}"
- )
- block_rewards = tree.calculate_rewards(block_number, dist)
- final_rewards = tree.merge_rewards(final_rewards, block_rewards)
-
- if prev_merkle_root_parameters is None:
- # it's the first merkle root update -> there are no unclaimed rewards
- unclaimed_rewards: Rewards = Rewards({})
- else:
- # fetch accounts that have claimed since last merkle root update
- claimed_accounts: Set[
- ChecksumAddress
- ] = get_merkle_distributor_claimed_addresses(
- merkle_distributor=self.merkle_distributor,
- from_block=prev_merkle_root_update_block_number,
- )
-
- # calculate unclaimed rewards
- unclaimed_rewards: Rewards = get_unclaimed_balances(
- merkle_proofs_ipfs_url=prev_merkle_root_parameters[1],
- claimed_accounts=claimed_accounts,
- ipfs_endpoint=IPFS_ENDPOINT,
- )
-
- # merge final rewards with unclaimed rewards
- if unclaimed_rewards:
- final_rewards = tree.merge_rewards(final_rewards, unclaimed_rewards)
-
- # calculate merkle elements
- merkle_elements: List[bytes] = []
- accounts: List[ChecksumAddress] = sorted(final_rewards.keys())
- new_claims: OrderedDict = OrderedDict()
- for i, account in enumerate(accounts):
- new_claim: OrderedDict = OrderedDict()
- reward_tokens: List[ChecksumAddress] = sorted(final_rewards[account].keys())
- reward_token_amounts: Dict[ChecksumAddress, Wei] = {}
- for reward_token in reward_tokens:
- origins: List[ChecksumAddress] = sorted(
- final_rewards[account][reward_token].keys()
- )
- values: List[str] = []
- for origin in origins:
- value: str = final_rewards[account][reward_token][origin]
- values.append(value)
- prev_value = reward_token_amounts.setdefault(reward_token, Wei(0))
- reward_token_amounts[reward_token] = Wei(prev_value + int(value))
-
- new_claim.setdefault("origins", []).append(origins)
- new_claim.setdefault("values", []).append(values)
-
- new_claim["index"] = i
- new_claim["reward_tokens"] = reward_tokens
- new_claims[account] = new_claim
-
- amounts: List[Wei] = [
- reward_token_amounts[token] for token in reward_tokens
- ]
- merkle_element: bytes = get_merkle_node(
- w3=self.w3,
- index=i,
- tokens=reward_tokens,
- account=account,
- amounts=amounts,
- )
- merkle_elements.append(merkle_element)
-
- merkle_tree = MerkleTree(merkle_elements)
-
- # collect proofs
- for i, account in enumerate(accounts):
- proof: List[HexStr] = merkle_tree.get_hex_proof(merkle_elements[i])
- new_claims[account]["proof"] = proof
-
- # calculate merkle root
- merkle_root: HexStr = merkle_tree.get_hex_root()
- logger.info(f"Generated new merkle root: {merkle_root}")
-
- # submit new claims to IPFS
- claims_ipfs_url = pin_claims_to_ipfs(
- claims=new_claims,
- ipfs_endpoint=IPFS_ENDPOINT,
- )
- logger.info(f"Submitted and pinned claims to IPFS: {claims_ipfs_url}")
-
- # vote for merkle root
- self.vote_for_merkle_root(
- current_block_number=current_block_number,
- current_nonce=current_nonce,
- merkle_root=merkle_root,
- merkle_proofs=claims_ipfs_url,
- )
-
- def vote_for_merkle_root(
- self,
- current_block_number: BlockNumber,
- current_nonce: int,
- merkle_root: HexStr,
- merkle_proofs: str,
- ) -> None:
- # generate candidate ID
- encoded_data: bytes = self.w3.codec.encode_abi(
- ["uint256", "bytes32", "string"],
- [current_nonce, merkle_root, merkle_proofs],
- )
- candidate_id: bytes = self.w3.keccak(primitive=encoded_data)
-
- # check whether has not voted yet for candidate
- if not check_oracle_has_vote(
- oracles=self.oracles,
- oracle=self.w3.eth.default_account, # type: ignore
- candidate_id=candidate_id,
- block_number=current_block_number,
- ):
- # submit vote
- logger.info(
- f"Submitting merkle root vote:"
- f" nonce={current_nonce},"
- f" merkle root={merkle_root},"
- f" claims IPFS URL={merkle_proofs}"
- )
- submit_oracle_merkle_root_vote(
- oracles=self.oracles,
- merkle_root=merkle_root,
- merkle_proofs=merkle_proofs,
- current_nonce=current_nonce,
- transaction_timeout=TRANSACTION_TIMEOUT,
- gas=ORACLE_VOTE_GAS_LIMIT,
- confirmation_blocks=ETH1_CONFIRMATION_BLOCKS,
- )
- logger.info("Merkle Root vote has been successfully submitted")
-
- # wait until enough votes will be submitted and value updated
- wait_for_oracles_nonce_update(
- w3=self.w3,
- oracles=self.oracles,
- confirmation_blocks=ETH1_CONFIRMATION_BLOCKS,
- timeout=VOTING_TIMEOUT,
- current_nonce=current_nonce,
- )
- logger.info("Oracles have successfully voted for the same merkle root")
-
- # check oracle balance
- if SEND_TELEGRAM_NOTIFICATIONS:
- check_default_account_balance(
- w3=self.w3,
- warning_amount=BALANCE_WARNING_THRESHOLD,
- error_amount=BALANCE_ERROR_THRESHOLD,
- )
diff --git a/src/merkle_distributor/uniswap_v3.py b/src/merkle_distributor/uniswap_v3.py
deleted file mode 100644
index 79996f0..0000000
--- a/src/merkle_distributor/uniswap_v3.py
+++ /dev/null
@@ -1,169 +0,0 @@
-from math import ceil, sqrt
-
-MIN_TICK: int = -887272
-MAX_TICK: int = -MIN_TICK
-MAX_UINT_256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-Q32 = 2 ** 32
-Q96 = 2 ** 96
-
-
-def get_amount0(
- tick_current: int,
- sqrt_ratio_x96: int,
- tick_lower: int,
- tick_upper: int,
- liquidity: int,
-) -> int:
- if tick_current < tick_lower:
- return get_amount0_delta(
- sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
- sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
- liquidity=liquidity,
- round_up=False,
- )
- elif tick_current < tick_upper:
- return get_amount0_delta(
- sqrt_ratio_ax96=sqrt_ratio_x96,
- sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
- liquidity=liquidity,
- round_up=False,
- )
-
- return 0
-
-
-def get_amount1(
- tick_current: int,
- sqrt_ratio_x96: int,
- tick_lower: int,
- tick_upper: int,
- liquidity: int,
-) -> int:
- if tick_current < tick_lower:
- return 0
- elif tick_current < tick_upper:
- return get_amount1_delta(
- sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
- sqrt_ratio_bx96=sqrt_ratio_x96,
- liquidity=liquidity,
- round_up=False,
- )
-
- return get_amount1_delta(
- sqrt_ratio_ax96=get_sqrt_ratio_at_tick(tick_lower),
- sqrt_ratio_bx96=get_sqrt_ratio_at_tick(tick_upper),
- liquidity=liquidity,
- round_up=False,
- )
-
-
-def get_amount0_delta(
- sqrt_ratio_ax96: int, sqrt_ratio_bx96: int, liquidity: int, round_up: bool
-) -> int:
- if sqrt_ratio_ax96 > sqrt_ratio_bx96:
- sqrt_ratio_ax96, sqrt_ratio_bx96 = sqrt_ratio_bx96, sqrt_ratio_ax96
-
- numerator1: int = liquidity << 96
- numerator2: int = sqrt_ratio_bx96 - sqrt_ratio_ax96
-
- if round_up:
- return ceil(
- (ceil((numerator1 * numerator2) / sqrt_ratio_bx96)) / sqrt_ratio_ax96
- )
- else:
- return ((numerator1 * numerator2) // sqrt_ratio_bx96) // sqrt_ratio_ax96
-
-
-def get_amount1_delta(
- sqrt_ratio_ax96: int, sqrt_ratio_bx96: int, liquidity: int, round_up: bool
-) -> int:
- if sqrt_ratio_ax96 > sqrt_ratio_bx96:
- sqrt_ratio_ax96, sqrt_ratio_bx96 = sqrt_ratio_bx96, sqrt_ratio_ax96
-
- if round_up:
- return ceil(liquidity * (sqrt_ratio_bx96 - sqrt_ratio_ax96) / Q96)
- else:
- return (liquidity * (sqrt_ratio_bx96 - sqrt_ratio_ax96)) // Q96
-
-
-def mul_shift(val: int, mul_by: int) -> int:
- return (val * mul_by) >> 128
-
-
-def get_sqrt_ratio_at_tick(tick: int) -> int:
- """
- :param str tick: The tick for which to compute the sqrt ratio
- :returns the sqrt ratio as a Q64.96 for the given tick. The sqrt ratio is computed as sqrt(1.0001)^tick
- """
- if not (MIN_TICK <= tick <= MAX_TICK and isinstance(tick, int)):
- raise ValueError(f"Received invalid tick: {tick}")
-
- if tick < 0:
- abs_tick: int = tick * -1
- else:
- abs_tick: int = tick
-
- if (abs_tick & 0x1) != 0:
- ratio: int = 0xFFFCB933BD6FAD37AA2D162D1A594001
- else:
- ratio: int = 0x100000000000000000000000000000000
-
- if (abs_tick & 0x2) != 0:
- ratio = mul_shift(ratio, 0xFFF97272373D413259A46990580E213A)
- if (abs_tick & 0x4) != 0:
- ratio = mul_shift(ratio, 0xFFF2E50F5F656932EF12357CF3C7FDCC)
- if (abs_tick & 0x8) != 0:
- ratio = mul_shift(ratio, 0xFFE5CACA7E10E4E61C3624EAA0941CD0)
- if (abs_tick & 0x10) != 0:
- ratio = mul_shift(ratio, 0xFFCB9843D60F6159C9DB58835C926644)
- if (abs_tick & 0x20) != 0:
- ratio = mul_shift(ratio, 0xFF973B41FA98C081472E6896DFB254C0)
- if (abs_tick & 0x40) != 0:
- ratio = mul_shift(ratio, 0xFF2EA16466C96A3843EC78B326B52861)
- if (abs_tick & 0x80) != 0:
- ratio = mul_shift(ratio, 0xFE5DEE046A99A2A811C461F1969C3053)
- if (abs_tick & 0x100) != 0:
- ratio = mul_shift(ratio, 0xFCBE86C7900A88AEDCFFC83B479AA3A4)
- if (abs_tick & 0x200) != 0:
- ratio = mul_shift(ratio, 0xF987A7253AC413176F2B074CF7815E54)
- if (abs_tick & 0x400) != 0:
- ratio = mul_shift(ratio, 0xF3392B0822B70005940C7A398E4B70F3)
- if (abs_tick & 0x800) != 0:
- ratio = mul_shift(ratio, 0xE7159475A2C29B7443B29C7FA6E889D9)
- if (abs_tick & 0x1000) != 0:
- ratio = mul_shift(ratio, 0xD097F3BDFD2022B8845AD8F792AA5825)
- if (abs_tick & 0x2000) != 0:
- ratio = mul_shift(ratio, 0xA9F746462D870FDF8A65DC1F90E061E5)
- if (abs_tick & 0x4000) != 0:
- ratio = mul_shift(ratio, 0x70D869A156D2A1B890BB3DF62BAF32F7)
- if (abs_tick & 0x8000) != 0:
- ratio = mul_shift(ratio, 0x31BE135F97D08FD981231505542FCFA6)
- if (abs_tick & 0x10000) != 0:
- ratio = mul_shift(ratio, 0x9AA508B5B7A84E1C677DE54F3E99BC9)
- if (abs_tick & 0x20000) != 0:
- ratio = mul_shift(ratio, 0x5D6AF8DEDB81196699C329225EE604)
- if (abs_tick & 0x40000) != 0:
- ratio = mul_shift(ratio, 0x2216E584F5FA1EA926041BEDFE98)
- if (abs_tick & 0x80000) != 0:
- ratio = mul_shift(ratio, 0x48A170391F7DC42444E8FA2)
-
- if tick > 0:
- ratio = MAX_UINT_256 // ratio
-
- # back to Q96
- if (ratio % Q32) > 0:
- return (ratio // Q32) + 1
- else:
- return ratio // Q32
-
-
-def encode_sqrt_ratio_x96(amount1: int, amount0: int) -> int:
- """
- :param int amount1: the numerator amount, i.e. amount of token1
- :param int amount0: the denominator amount, i.e amount of token0
- :returns the sqrt ratio as a Q64.96 corresponding to a given ratio of amount1 and amount0
- """
- numerator: int = amount1 << 192
- denominator: int = amount0
- ratio_x192: int = numerator // denominator
- return int(sqrt(ratio_x192))
diff --git a/src/merkle_distributor/utils.py b/src/merkle_distributor/utils.py
deleted file mode 100644
index 3e2688d..0000000
--- a/src/merkle_distributor/utils.py
+++ /dev/null
@@ -1,1392 +0,0 @@
-import ipfshttpclient
-import logging
-from ens.constants import EMPTY_ADDR_HEX
-from eth_typing import HexStr, ChecksumAddress
-from gql import Client, gql
-from gql.transport.requests import RequestsHTTPTransport
-from tenacity import retry, Retrying
-from tenacity.before_sleep import before_sleep_log
-from typing import (
- Tuple,
- Set,
- Dict,
- Union,
- List,
- NamedTuple,
- TypedDict,
- NewType,
- Iterator,
-)
-from web3 import Web3
-from web3.contract import Contract
-from web3.exceptions import ContractLogicError
-from web3.types import Wei, BlockNumber
-
-from src.merkle_distributor.uniswap_v3 import get_amount0, get_amount1
-from src.staking_rewards.utils import backoff, stop_attempts
-from src.utils import wait_for_transaction
-
-logger = logging.getLogger(__name__)
-
-# 1e18
-ETHER: int = Web3.toWei(1, "ether")
-IPFS_PREFIX: str = "ipfs://"
-
-Rewards = NewType(
- "Rewards", Dict[ChecksumAddress, Dict[ChecksumAddress, Dict[ChecksumAddress, str]]]
-)
-
-
-class Distribution(NamedTuple):
- beneficiary: ChecksumAddress
- token: ChecksumAddress
- value: Wei
-
-
-class OraclesSettings(TypedDict):
- # Number of blocks between checking the balances again for allocating rewards
- snapshot_interval_in_blocks: int
-
- # set of balancer staked ETH pool IDs
- balancer_staked_eth_pool_ids: Set[HexStr]
-
- # mapping between balancer pool address and its ID
- balancer_pools: Dict[ChecksumAddress, HexStr]
-
- # set of Uniswap V2 supported pairs
- uniswap_v2_pairs: Set[ChecksumAddress]
-
- # set of Uniswap V3 supported pairs
- uniswap_v3_pairs: Set[ChecksumAddress]
-
- # set of Uniswap V3 supported staked ETH pairs
- uniswap_v3_staked_eth_pairs: Set[ChecksumAddress]
-
- # set of Uniswap V3 full range pairs
- uniswap_v3_full_range_pairs: Set[ChecksumAddress]
-
- # dictionary of supported ERC-20 tokens and the block number when they were created
- erc20_tokens: Dict[ChecksumAddress, BlockNumber]
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_merkle_root_voting_parameters(
- oracles: Contract,
- multicall: Contract,
- reward_eth_token: Contract,
- block_number: BlockNumber,
-) -> Tuple[bool, bool, int, BlockNumber]:
- """Fetches merkle root voting parameters."""
- calls = [
- dict(target=oracles.address, callData=oracles.encodeABI("isMerkleRootVoting")),
- dict(target=oracles.address, callData=oracles.encodeABI("paused")),
- dict(target=oracles.address, callData=oracles.encodeABI("currentNonce")),
- dict(
- target=reward_eth_token.address,
- callData=reward_eth_token.encodeABI("lastUpdateBlockNumber"),
- ),
- ]
- response = multicall.functions.aggregate(calls).call(block_identifier=block_number)[
- 1
- ]
- return (
- bool(Web3.toInt(response[0])),
- bool(Web3.toInt(response[1])),
- Web3.toInt(response[2]),
- Web3.toInt(response[3]),
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_prev_merkle_root_parameters(
- merkle_distributor: Contract,
- reward_eth_token: Contract,
- to_block: BlockNumber,
-) -> Union[None, Tuple[HexStr, HexStr, BlockNumber, BlockNumber]]:
- """
- Fetches previous merkle root update parameters.
- """
- events = merkle_distributor.events.MerkleRootUpdated.getLogs(
- fromBlock=0, toBlock=to_block
- )
- if not events:
- # it's the first merkle root update
- return None
-
- # fetch block number of staking rewards update prior to merkle distributor update
- prev_merkle_root_update_block_number = events[-1]["blockNumber"]
- prev_merkle_root_staking_rewards_update_block_number: BlockNumber = (
- reward_eth_token.functions.lastUpdateBlockNumber().call(
- block_identifier=prev_merkle_root_update_block_number
- )
- )
-
- return (
- events[-1]["args"]["merkleRoot"],
- events[-1]["args"]["merkleProofs"],
- prev_merkle_root_update_block_number,
- prev_merkle_root_staking_rewards_update_block_number,
- )
-
-
-def get_staked_eth_period_reward(
- reward_eth_token: Contract,
- new_rewards_block_number: BlockNumber,
- prev_merkle_root_update_block_number: BlockNumber = None,
- prev_merkle_root_staking_rewards_update_block_number: BlockNumber = None,
-) -> Wei:
- """Calculates period reward of staked eth since the last update."""
- total_rewards: Wei = reward_eth_token.functions.balanceOf(EMPTY_ADDR_HEX).call(
- block_identifier=new_rewards_block_number
- )
-
- if prev_merkle_root_staking_rewards_update_block_number <= 0:
- # it's the first merkle root update -> no need to subtract previously claimed rewards
- return total_rewards
-
- # it's not the first merkle root update -> calculate unclaimed
- # rewards and subtract them from the total rewards
- prev_total_rewards: Wei = reward_eth_token.functions.balanceOf(EMPTY_ADDR_HEX).call(
- block_identifier=prev_merkle_root_staking_rewards_update_block_number
- )
- claimed_events = reward_eth_token.events.Transfer.getLogs(
- argument_filters={"from": EMPTY_ADDR_HEX},
- fromBlock=prev_merkle_root_update_block_number,
- toBlock="latest",
- )
- for event in claimed_events:
- prev_total_rewards -= event["args"]["value"]
-
- return Wei(total_rewards - prev_total_rewards)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_reth_disabled_accounts(
- reward_eth_token: Contract, to_block: BlockNumber
-) -> Set[ChecksumAddress]:
- """
- Fetches accounts that have rETH2 distribution disabled from RewardEthToken contract.
- """
- events = reward_eth_token.events.RewardsToggled.getLogs(
- fromBlock=0, toBlock=to_block
- )
- reth_disabled_accounts: Set[ChecksumAddress] = set()
- for event in events:
- account = Web3.toChecksumAddress(event["args"]["account"])
- is_disabled = event["args"]["isDisabled"]
-
- if not is_disabled and account in reth_disabled_accounts:
- reth_disabled_accounts.remove(account)
- elif is_disabled and account not in reth_disabled_accounts:
- reth_disabled_accounts.add(account)
-
- return reth_disabled_accounts
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_staked_eth_distributions(
- staked_eth_token: Contract,
- multicall: Contract,
- reward_eth_token_address: ChecksumAddress,
- reth_disabled_accounts: List[ChecksumAddress],
- staked_eth_period_reward: Wei,
- new_rewards_block_number: BlockNumber,
-) -> List[Distribution]:
- """Creates staked eth reward distributions."""
- if staked_eth_period_reward <= 0:
- # cannot create distributions
- logger.warning(
- f"Cannot generate staked ETH distributions: period reward={staked_eth_period_reward} Wei"
- )
- return []
-
- # fetch staked eth balances
- reth_disabled_accounts = sorted(reth_disabled_accounts)
- staked_eth_balance_calls = [
- dict(
- target=staked_eth_token.address,
- callData=staked_eth_token.encodeABI("balanceOf", [account]),
- )
- for account in reth_disabled_accounts
- ]
- response = multicall.functions.aggregate(staked_eth_balance_calls).call(
- block_identifier=new_rewards_block_number
- )[1]
-
- # parse balances
- staked_eth_balances: List[Wei] = []
- total_staked_eth_balance: Wei = Wei(0)
- for bal in response:
- balance: Wei = Web3.toInt(bal)
- staked_eth_balances.append(balance)
- total_staked_eth_balance += balance
-
- # no total balance
- if total_staked_eth_balance <= 0:
- # cannot create distributions
- logger.warning(
- f"Cannot generate staked ETH distributions: total balance={total_staked_eth_balance} Wei"
- )
- return []
-
- # calculate staked eth rewards distribution
- distributions: List[Distribution] = []
- pairs: Iterator[Tuple[ChecksumAddress, Wei]] = zip(
- reth_disabled_accounts, staked_eth_balances
- )
- distributed: Wei = Wei(0)
- for beneficiary, staked_eth_balance in pairs:
- if beneficiary == reth_disabled_accounts[-1]:
- reward: Wei = Wei(staked_eth_period_reward - distributed)
- else:
- reward: Wei = Wei(
- staked_eth_period_reward
- * staked_eth_balance
- // total_staked_eth_balance
- )
-
- if reward <= 0:
- continue
-
- distributed += reward
- distributions.append(
- Distribution(beneficiary, reward_eth_token_address, reward)
- )
-
- return distributions
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_oracles_config(
- node_id: bytes,
- ens_resolver: Contract,
- ens_text_record: str,
- ipfs_endpoint: str,
-) -> OraclesSettings:
- """Fetches oracles config from the DAO's ENS text record."""
- # fetch IPFS URL
- oracles_config_url = ens_resolver.functions.text(node_id, ens_text_record).call(block_identifier="latest")
-
- if oracles_config_url.startswith(IPFS_PREFIX):
- oracles_config_url = oracles_config_url[7:]
-
- with ipfshttpclient.connect(ipfs_endpoint) as client:
- oracles_settings = client.get_json(oracles_config_url)
-
- return OraclesSettings(
- snapshot_interval_in_blocks=int(
- oracles_settings["snapshot_interval_in_blocks"]
- ),
- balancer_staked_eth_pool_ids=set(
- oracles_settings.get("balancer_staked_eth_pool_ids", [])
- ),
- balancer_pools={
- Web3.toChecksumAddress(pool_address): pool_id
- for pool_address, pool_id in oracles_settings.get(
- "balancer_pools", {}
- ).items()
- },
- uniswap_v2_pairs=set(
- [
- Web3.toChecksumAddress(pair)
- for pair in oracles_settings.get("uniswap_v2_pairs", [])
- ]
- ),
- uniswap_v3_pairs=set(
- [
- Web3.toChecksumAddress(pair)
- for pair in oracles_settings.get("uniswap_v3_pairs", [])
- ]
- ),
- uniswap_v3_staked_eth_pairs=set(
- [
- Web3.toChecksumAddress(pair)
- for pair in oracles_settings.get("uniswap_v3_staked_eth_pairs", [])
- ]
- ),
- uniswap_v3_full_range_pairs=set(
- [
- Web3.toChecksumAddress(pair)
- for pair in oracles_settings.get("uniswap_v3_full_range_pairs", [])
- ]
- ),
- erc20_tokens={
- Web3.toChecksumAddress(token_address): int(block_number)
- for token_address, block_number in oracles_settings.get(
- "erc20_tokens", {}
- ).items()
- },
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_distributions(
- merkle_distributor: Contract,
- distribution_start_block: BlockNumber,
- distribution_end_block: BlockNumber,
- blocks_interval: int,
-) -> Dict[BlockNumber, List[Distribution]]:
- """Creates rewards distributions for reward tokens with specific block intervals."""
- distribute_events = merkle_distributor.events.DistributionAdded.getLogs(
- fromBlock=0, toBlock="latest"
- )
- distributions: Dict[BlockNumber, List[Distribution]] = {}
- for event in distribute_events:
- token: ChecksumAddress = Web3.toChecksumAddress(event["args"]["token"])
- beneficiary: ChecksumAddress = Web3.toChecksumAddress(
- event["args"]["beneficiary"]
- )
- amount: Wei = event["args"]["amount"]
- start_block: BlockNumber = event["args"]["startBlock"]
- end_block: BlockNumber = event["args"]["endBlock"]
-
- if (
- end_block <= distribution_start_block
- or start_block >= distribution_end_block
- ):
- # distributions are out of current range
- continue
-
- # calculate reward distributions for spread of `block_interval`
- total_blocks = end_block - start_block
- if total_blocks <= 0:
- continue
-
- reward_per_block: Wei = Wei(amount // total_blocks)
- interval_reward: Wei = Wei(reward_per_block * blocks_interval)
- start: BlockNumber = max(distribution_start_block, start_block)
- end: BlockNumber = min(distribution_end_block, end_block)
- while start != end:
- if start + blocks_interval > end:
- interval = end - start
- reward: Wei = Wei(reward_per_block * interval)
- if end == end_block:
- # collect left overs
- reward += amount - (reward_per_block * total_blocks)
-
- if reward > 0:
- distributions.setdefault(BlockNumber(start + interval), []).append(
- Distribution(beneficiary, token, reward)
- )
- break
-
- start += blocks_interval
- if interval_reward > 0:
- distributions.setdefault(start, []).append(
- Distribution(beneficiary, token, interval_reward)
- )
-
- return distributions
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_merkle_distributor_claimed_addresses(
- merkle_distributor: Contract, from_block: BlockNumber
-) -> Set[ChecksumAddress]:
- """Fetches addresses that have claimed their tokens from `MerkleDistributor` contract."""
- events = merkle_distributor.events.Claimed.getLogs(
- fromBlock=from_block, toBlock="latest"
- )
- return set(Web3.toChecksumAddress(event["args"]["account"]) for event in events)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_unclaimed_balances(
- merkle_proofs_ipfs_url: str,
- claimed_accounts: Set[ChecksumAddress],
- ipfs_endpoint: str,
-) -> Rewards:
- """Fetches balances of previous merkle drop from IPFS and removes the accounts that have already claimed."""
- if merkle_proofs_ipfs_url.startswith(IPFS_PREFIX):
- merkle_proofs_ipfs_url = merkle_proofs_ipfs_url[7:]
-
- with ipfshttpclient.connect(ipfs_endpoint) as client:
- prev_claims: Dict = client.get_json(merkle_proofs_ipfs_url)
-
- unclaimed_rewards: Rewards = Rewards({})
- for account, claim in prev_claims.items():
- if account in claimed_accounts:
- continue
-
- for i, reward_token in enumerate(claim["reward_tokens"]):
- for origin, value in zip(claim["origins"][i], claim["values"][i]):
- prev_unclaimed = (
- unclaimed_rewards.setdefault(account, {})
- .setdefault(reward_token, {})
- .setdefault(origin, "0")
- )
- unclaimed_rewards[account][reward_token][origin] = str(
- int(prev_unclaimed) + int(value)
- )
-
- return unclaimed_rewards
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def execute_graphql_query(client: Client, query: str, variables: Dict) -> Dict:
- """Executes GraphQL query."""
- return client.execute(query, variable_values=variables)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_balancer_vault_pool_shares(
- subgraph_url: str,
- token_address: ChecksumAddress,
- pool_ids: Set[HexStr],
- block_number: BlockNumber,
-) -> Dict[ChecksumAddress, Wei]:
- """Fetches vault shares for specific token in balancer pools."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # provide a GraphQL query
- query = gql(
- """
- query getPools($block_number: Int, $pool_ids: [ID], $token_address: String) {
- pools(block: { number: $block_number }, where: { id_in: $pool_ids }) {
- address
- tokens(where: { address: $token_address }) {
- balance
- }
- }
- }
- """
- )
-
- # execute the query on the transport
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=block_number,
- pool_ids=list(pool_ids),
- token_address=token_address.lower(),
- ),
- )
-
- # extract pool shares
- shares: Dict[ChecksumAddress, Wei] = {}
- pools = result.get("pools", [])
- for pool in pools:
- pool_address: ChecksumAddress = Web3.toChecksumAddress(pool["address"])
- balances = pool.get("tokens", [])
- if not balances or len(balances) != 1:
- balance: Wei = Wei(0)
- else:
- balance: Wei = Web3.toWei((balances[0].get("balance", "0"), "ether"))
-
- shares[pool_address] = balance
-
- return shares
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_balancer_pool_balances(
- subgraph_url: str,
- pool_id: HexStr,
- block_number: BlockNumber,
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches users' balances of the Balancer V2 pool."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # provide a GraphQL query
- query = gql(
- """
- query getPoolShares($block_number: Int, $pool_id: String, $last_id: ID) {
- poolShares(
- first: 1000
- block: { number: $block_number }
- where: { poolId: $pool_id, id_gt: $last_id }
- orderBy: id
- orderDirection: asc
- ) {
- id
- userAddress {
- id
- }
- balance
- }
- }
- """
- )
-
- # execute the query on the transport in chunks of 1000 entities
- last_id = ""
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=block_number, pool_id=pool_id.lower(), last_id=last_id
- ),
- )
- pool_shares_chunk = result.get("poolShares", [])
- pool_shares = pool_shares_chunk
-
- # accumulate chunks of pool shares
- while len(pool_shares_chunk) >= 1000:
- last_id = pool_shares_chunk[-1]["id"]
- if not last_id:
- break
-
- result = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=block_number, pool_id=pool_id.lower(), last_id=last_id
- ),
- )
- pool_shares_chunk = result.get("poolShares", [])
- pool_shares.extend(pool_shares_chunk)
-
- # extract balances and total supply
- balances: Dict[ChecksumAddress, Wei] = {}
- total_supply: Wei = Wei(0)
- for pool_share in pool_shares:
- user_address: ChecksumAddress = pool_share.get("userAddress", {}).get(
- "id", EMPTY_ADDR_HEX
- )
- if not user_address or user_address == EMPTY_ADDR_HEX:
- continue
-
- balance: Wei = Web3.toWei(pool_share.get("balance", "0"), "ether")
- if balance <= 0:
- continue
-
- user_address = Web3.toChecksumAddress(user_address)
- if user_address in balances:
- raise ValueError(
- f"Duplicated balance entry for the user with address {user_address}"
- )
-
- balances[user_address] = balance
- total_supply += balance
-
- return balances, total_supply
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_uniswap_v2_balances(
- subgraph_url: str,
- pair_address: ChecksumAddress,
- block_number: BlockNumber,
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches users' balances of the Uniswap V2 Pair."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # provide a GraphQL query
- query = gql(
- """
- query getLiquidityPositions($block_number: Int, $pair: String, $last_id: ID) {
- liquidityPositions(
- first: 1000
- block: { number: $block_number }
- where: { pair: $pair, id_gt: $last_id }
- orderBy: id
- orderDirection: asc
- ) {
- id
- user {
- id
- }
- liquidityTokenBalance
- }
- }
- """
- )
-
- # execute the query on the transport in chunks of 1000 entities
- last_id = ""
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=block_number, pair=pair_address.lower(), last_id=last_id
- ),
- )
- liquidity_positions_chunk = result.get("liquidityPositions", [])
- liquidity_positions = liquidity_positions_chunk
-
- # accumulate chunks of pool shares
- while len(liquidity_positions_chunk) >= 1000:
- last_id = liquidity_positions_chunk[-1]["id"]
- if not last_id:
- break
-
- result = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=block_number, pair=pair_address.lower(), last_id=last_id
- ),
- )
- liquidity_positions_chunk = result.get("liquidityPositions", [])
- liquidity_positions.extend(liquidity_positions_chunk)
-
- # extract balances and total supply
- balances: Dict[ChecksumAddress, Wei] = {}
- total_supply: Wei = Wei(0)
-
- for liquidity_position in liquidity_positions:
- user_address: ChecksumAddress = liquidity_position.get("user", {}).get(
- "id", EMPTY_ADDR_HEX
- )
- if not user_address or user_address == EMPTY_ADDR_HEX:
- continue
-
- balance: Wei = Web3.toWei(
- liquidity_position.get("liquidityTokenBalance", "0"), "ether"
- )
- if balance <= 0:
- continue
-
- user_address = Web3.toChecksumAddress(user_address)
- if user_address in balances:
- raise ValueError(
- f"Duplicated balance entry for the user with address {user_address}"
- )
-
- balances[user_address] = balance
- total_supply += balance
-
- return balances, total_supply
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_uniswap_v3_balances(
- subgraph_url: str, pool_address: ChecksumAddress, to_block: BlockNumber
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches users' balances of the Uniswap V3 Pair that provide liquidity for the current tick."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # fetch pool current tick and token addresses
- query = gql(
- """
- query getPools($block_number: Int, $pool_address: ID) {
- pools(block: { number: $block_number }, where: { id: $pool_address }) {
- tick
- }
- }
- """
- )
-
- # execute the query on the transport
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(block_number=to_block, pool_address=pool_address.lower()),
- )
- pools = result.get("pools", [])
- if not pools:
- return {}, Wei(0)
-
- tick_current: str = pools[0].get("tick", "")
- if not tick_current:
- return {}, Wei(0)
-
- # fetch positions that cover the current tick
- query = gql(
- """
- query getPositions(
- $block_number: Int
- $tick_current: BigInt
- $pool_address: String
- $last_id: ID
- ) {
- positions(
- first: 1000
- block: { number: $block_number }
- where: {
- tickLower_lte: $tick_current
- tickUpper_gt: $tick_current
- pool: $pool_address
- id_gt: $last_id
- }
- orderBy: id
- orderDirection: asc
- ) {
- owner
- liquidity
- }
- }
- """
- )
-
- # execute the query on the transport in chunks of 1000 entities
- last_id = ""
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- tick_current=tick_current,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions = positions_chunk
-
- # accumulate chunks
- while len(positions_chunk) >= 1000:
- last_id = positions_chunk[-1]["id"]
- if not last_id:
- break
-
- result = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- tick_current=tick_current,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions.extend(positions_chunk)
-
- # process positions
- account_to_liquidity: Dict[ChecksumAddress, Wei] = {}
- total_liquidity: Wei = Wei(0)
- for position in positions:
- account: ChecksumAddress = position.get("owner", EMPTY_ADDR_HEX)
- if account in (EMPTY_ADDR_HEX, ""):
- continue
-
- account = Web3.toChecksumAddress(account)
- liquidity: Wei = Wei(int(position.get("liquidity", "0")))
- if liquidity <= 0:
- continue
-
- account_to_liquidity[account] = Wei(
- account_to_liquidity.setdefault(account, Wei(0)) + liquidity
- )
- total_liquidity += liquidity
-
- return account_to_liquidity, total_liquidity
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_uniswap_v3_full_range_balances(
- subgraph_url: str, pool_address: ChecksumAddress, to_block: BlockNumber
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches balances of the Uniswap V3 positions with full range."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # fetch positions that cover the current tick
- query = gql(
- """
- query getPositions(
- $block_number: Int
- $pool_address: String
- $last_id: ID
- ) {
- positions(
- first: 1000
- block: { number: $block_number }
- where: {
- tickLower: -887220
- tickUpper: 887220
- pool: $pool_address
- id_gt: $last_id
- }
- orderBy: id
- orderDirection: asc
- ) {
- owner
- liquidity
- }
- }
- """
- )
-
- # execute the query on the transport in chunks of 1000 entities
- last_id = ""
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions = positions_chunk
-
- # accumulate chunks
- while len(positions_chunk) >= 1000:
- last_id = positions_chunk[-1]["id"]
- if not last_id:
- break
-
- result = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions.extend(positions_chunk)
-
- # process positions
- account_to_liquidity: Dict[ChecksumAddress, Wei] = {}
- total_liquidity: Wei = Wei(0)
- for position in positions:
- account: ChecksumAddress = position.get("owner", EMPTY_ADDR_HEX)
- if account in (EMPTY_ADDR_HEX, ""):
- continue
-
- account = Web3.toChecksumAddress(account)
- liquidity: Wei = Wei(int(position.get("liquidity", "0")))
- if liquidity <= 0:
- continue
-
- account_to_liquidity[account] = Wei(
- account_to_liquidity.setdefault(account, Wei(0)) + liquidity
- )
- total_liquidity += liquidity
-
- return account_to_liquidity, total_liquidity
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_uniswap_v3_staked_eth_balances(
- subgraph_url: str,
- pool_address: ChecksumAddress,
- staked_eth_token_address: ChecksumAddress,
- to_block: BlockNumber,
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches users' staked eth balances of the Uniswap V3 Pair across all the ticks."""
- transport = RequestsHTTPTransport(url=subgraph_url)
-
- # create a GraphQL client using the defined transport
- client = Client(transport=transport, fetch_schema_from_transport=False)
-
- # fetch pool current tick and token addresses
- query = gql(
- """
- query getPools($block_number: Int, $pool_address: ID) {
- pools(block: { number: $block_number }, where: { id: $pool_address }) {
- tick
- sqrtPrice
- }
- }
- """
- )
-
- # execute the query on the transport
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(block_number=to_block, pool_address=pool_address.lower()),
- )
- pools = result.get("pools", [])
- if not pools:
- return {}, Wei(0)
-
- tick_current: int = pools[0].get("tick", "")
- if not tick_current:
- return {}, Wei(0)
- tick_current = int(tick_current)
-
- sqrt_price: int = pools[0].get("sqrtPrice", "")
- if not sqrt_price:
- return {}, Wei(0)
- sqrt_price = int(sqrt_price)
-
- # fetch positions that cover the current tick
- query = gql(
- """
- query getPositions($block_number: Int, $pool_address: String, $last_id: ID) {
- positions(
- first: 1000
- block: { number: $block_number }
- where: { pool: $pool_address, id_gt: $last_id }
- orderBy: id
- orderDirection: asc
- ) {
- owner
- liquidity
- tickLower
- tickUpper
- token0 {
- id
- }
- token1 {
- id
- }
- }
- }
- """
- )
-
- # execute the query on the transport in chunks of 1000 entities
- last_id = ""
- result: Dict = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions = positions_chunk
-
- # accumulate chunks
- while len(positions_chunk) >= 1000:
- last_id = positions_chunk[-1]["id"]
- if not last_id:
- break
-
- result = execute_graphql_query(
- client=client,
- query=query,
- variables=dict(
- block_number=to_block,
- tick_current=tick_current,
- pool_address=pool_address.lower(),
- last_id=last_id,
- ),
- )
- positions_chunk = result.get("positions", [])
- positions.extend(positions_chunk)
-
- # process positions
- account_to_staked_eth: Dict[ChecksumAddress, Wei] = {}
- total_staked_eth: Wei = Wei(0)
- for position in positions:
- account: ChecksumAddress = position.get("owner", EMPTY_ADDR_HEX)
- if account in (EMPTY_ADDR_HEX, ""):
- continue
- account = Web3.toChecksumAddress(account)
-
- liquidity: int = int(position.get("liquidity", "0"))
- if liquidity <= 0:
- continue
-
- tick_lower: int = position.get("tickLower", "")
- if tick_lower in ("", None):
- continue
- tick_lower = int(tick_lower)
-
- tick_upper: int = position.get("tickUpper", "")
- if tick_upper in ("", None):
- continue
- tick_upper = int(tick_upper)
-
- token0_address: ChecksumAddress = position.get("token0", {}).get(
- "id", EMPTY_ADDR_HEX
- )
- if token0_address in (EMPTY_ADDR_HEX, ""):
- continue
-
- if Web3.toChecksumAddress(token0_address) == staked_eth_token_address:
- staked_eth_amount: Wei = Wei(
- get_amount0(
- tick_current=tick_current,
- sqrt_ratio_x96=sqrt_price,
- tick_lower=tick_lower,
- tick_upper=tick_upper,
- liquidity=liquidity,
- )
- )
- account_to_staked_eth[account] = Wei(
- account_to_staked_eth.setdefault(account, Wei(0)) + staked_eth_amount
- )
- total_staked_eth += staked_eth_amount
- continue
-
- token1_address: ChecksumAddress = position.get("token1", {}).get(
- "id", EMPTY_ADDR_HEX
- )
- if token1_address in (EMPTY_ADDR_HEX, ""):
- continue
-
- if Web3.toChecksumAddress(token1_address) == staked_eth_token_address:
- staked_eth_amount: Wei = Wei(
- get_amount1(
- tick_current=tick_current,
- sqrt_ratio_x96=sqrt_price,
- tick_lower=tick_lower,
- tick_upper=tick_upper,
- liquidity=liquidity,
- )
- )
- account_to_staked_eth[account] = Wei(
- account_to_staked_eth.setdefault(account, Wei(0)) + staked_eth_amount
- )
- total_staked_eth += staked_eth_amount
-
- return account_to_staked_eth, total_staked_eth
-
-
-def get_token_participated_accounts(
- token: Contract, start_block: BlockNumber, end_block: BlockNumber
-) -> Set[ChecksumAddress]:
- """Fetches accounts that were in either `from` or `to` of the contract Transfer event."""
- blocks_spread = 200_000
- accounts: Set[ChecksumAddress] = set()
- while start_block < end_block:
- for attempt in Retrying(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
- ):
- with attempt:
- if start_block + blocks_spread >= end_block:
- to_block: BlockNumber = end_block
- else:
- to_block: BlockNumber = start_block + blocks_spread
- try:
- transfer_events = token.events.Transfer.getLogs(
- fromBlock=start_block, toBlock=to_block
- )
- start_block = to_block + 1
- except Exception as e:
- blocks_spread = blocks_spread // 2
- logger.warning(
- f"Failed to fetch transfer events: from block={start_block}, to block={to_block},"
- f" changing blocks spread to={blocks_spread}"
- )
- raise e
-
- for transfer_event in transfer_events:
- to_address: ChecksumAddress = Web3.toChecksumAddress(
- transfer_event["args"]["to"]
- )
- from_address: ChecksumAddress = Web3.toChecksumAddress(
- transfer_event["args"]["from"]
- )
- if to_address != EMPTY_ADDR_HEX:
- accounts.add(to_address)
- if from_address != EMPTY_ADDR_HEX:
- accounts.add(from_address)
-
- return accounts
-
-
-def get_erc20_token_balances(
- token: Contract, start_block: BlockNumber, end_block: BlockNumber
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches balances of the ERC-20 token."""
- blocks_spread = 200_000
- balances: Dict[ChecksumAddress, Wei] = {}
- while start_block < end_block:
- for attempt in Retrying(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
- ):
- with attempt:
- if start_block + blocks_spread >= end_block:
- to_block: BlockNumber = end_block
- else:
- to_block: BlockNumber = start_block + blocks_spread
- try:
- transfer_events = token.events.Transfer.getLogs(
- fromBlock=start_block, toBlock=to_block
- )
- start_block = to_block + 1
- except Exception as e:
- blocks_spread = blocks_spread // 2
- logger.warning(
- f"Failed to fetch transfer events: from block={start_block}, to block={to_block},"
- f" changing blocks spread to={blocks_spread}"
- )
- raise e
-
- for transfer_event in transfer_events:
- to_address: ChecksumAddress = Web3.toChecksumAddress(
- transfer_event["args"]["to"]
- )
- from_address: ChecksumAddress = Web3.toChecksumAddress(
- transfer_event["args"]["from"]
- )
- value: Wei = transfer_event["args"]["value"]
- if to_address != EMPTY_ADDR_HEX:
- balances[to_address] = Wei(
- balances.get(to_address, Wei(0)) + value
- )
- if from_address != EMPTY_ADDR_HEX:
- balances[from_address] = Wei(
- balances.get(from_address, Wei(0)) - value
- )
-
- return balances, sum(balances.values())
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_reward_eth_token_balances(
- reward_eth_token: Contract,
- staked_eth_token: Contract,
- multicall: Contract,
- from_block: BlockNumber,
- to_block: BlockNumber,
-) -> Tuple[Dict[ChecksumAddress, Wei], Wei]:
- """Fetches RewardEthToken balances and total supply excluding maintainer."""
-
- # fetch maintainer address and skip allocating reward to it
- maintainer = Web3.toChecksumAddress(
- reward_eth_token.functions.maintainer().call(block_identifier=to_block)
- )
-
- # fetch all the staked eth token addresses
- staked_eth_accounts: Set[ChecksumAddress] = get_token_participated_accounts(
- token=staked_eth_token,
- start_block=from_block,
- end_block=to_block,
- )
-
- # fetch all the reward eth token addresses
- reward_eth_accounts: Set[ChecksumAddress] = get_token_participated_accounts(
- token=reward_eth_token,
- start_block=from_block,
- end_block=to_block,
- )
-
- # fetch total supply, maintainer address
- all_accounts: List[ChecksumAddress] = list(
- staked_eth_accounts.union(reward_eth_accounts)
- )
- if not all_accounts:
- return {}, Wei(0)
-
- # fetch rETH2 balances for all accounts in batches
- balances: List[Wei] = []
- start_index = 0
- end_index = len(all_accounts)
- batch_size = 1000
- while start_index < end_index:
- for attempt in Retrying(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
- ):
- with attempt:
- if start_index + batch_size >= end_index:
- to_index = end_index
- else:
- to_index = start_index + batch_size
- try:
- accounts_batch = all_accounts[start_index:to_index]
- # fetch rETH2 balance in batch call
- calls = [
- {
- "target": reward_eth_token.address,
- "callData": reward_eth_token.encodeABI(
- fn_name="balanceOf", args=[account]
- ),
- }
- for account in accounts_batch
- ]
- response = multicall.functions.aggregate(calls).call(
- block_identifier=to_block
- )
- balances.extend(
- [
- reward_eth_token.web3.toInt(primitive=balance)
- for balance in response[1]
- ]
- )
- start_index = to_index
- except Exception as e:
- prev_batch = batch_size
- batch_size = prev_batch // 2
- logger.warning(
- f"Failed to fetch rETH2 balances for batch of {prev_batch} accounts,"
- f" changing batch to={batch_size}"
- )
- raise e
-
- total_supply: Wei = Wei(0)
- all_balances: Dict[ChecksumAddress, Wei] = {}
- for account, balance in zip(all_accounts, balances):
- if account == maintainer or account == EMPTY_ADDR_HEX or balance <= 0:
- # count maintainer out to not assign rewards to it
- continue
-
- total_supply += balance
- all_balances[account] = balance
-
- return all_balances, total_supply
-
-
-def get_ens_node_id(ens_name: str) -> bytes:
- """Calculates ENS node ID based on the domain name."""
- if not ens_name:
- return b"\0" * 32
-
- label, _, remainder = ens_name.partition(".")
- return Web3.keccak(primitive=get_ens_node_id(remainder) + Web3.keccak(text=label))
-
-
-def get_merkle_node(
- w3: Web3,
- index: int,
- tokens: List[ChecksumAddress],
- account: ChecksumAddress,
- amounts: List[Wei],
-) -> bytes:
- """Generates node for merkle tree."""
- encoded_data: bytes = w3.codec.encode_abi(
- ["uint256", "address[]", "address", "uint256[]"],
- [index, tokens, account, amounts],
- )
- return w3.keccak(primitive=encoded_data)
-
-
-def pin_claims_to_ipfs(claims: Dict, ipfs_endpoint: str) -> str:
- """Submits claims to the IPFS and pins the file."""
- with ipfshttpclient.connect(ipfs_endpoint) as client:
- ipfs_hash = client.add_json(claims)
- client.pin.add(ipfs_hash)
-
- if not ipfs_hash.startswith(IPFS_PREFIX):
- ipfs_hash = IPFS_PREFIX + ipfs_hash
- return ipfs_hash
-
-
-def submit_oracle_merkle_root_vote(
- oracles: Contract,
- merkle_root: HexStr,
- merkle_proofs: str,
- current_nonce: int,
- transaction_timeout: int,
- gas: Wei,
- confirmation_blocks: int,
-) -> None:
- """Submits new merkle root vote to `Oracles` contract."""
- for attempt in Retrying(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
- ):
- with attempt:
- account_nonce = oracles.web3.eth.getTransactionCount(
- oracles.web3.eth.default_account
- )
- try:
- # check whether gas price can be estimated for the the vote
- oracles.functions.voteForMerkleRoot(
- current_nonce, merkle_root, merkle_proofs
- ).estimateGas({"gas": gas, "nonce": account_nonce})
- except ContractLogicError as e:
- # check whether nonce has changed -> new merkle root was already submitted
- if current_nonce != oracles.functions.currentNonce().call():
- return
- raise e
-
- tx_hash = oracles.functions.voteForMerkleRoot(
- current_nonce, merkle_root, merkle_proofs
- ).transact({"gas": gas, "nonce": account_nonce})
-
- wait_for_transaction(
- oracles=oracles,
- tx_hash=tx_hash,
- timeout=transaction_timeout,
- confirmation_blocks=confirmation_blocks,
- )
diff --git a/proto/eth/v1alpha1/__init__.py b/src/rewards/__init__.py
similarity index 100%
rename from proto/eth/v1alpha1/__init__.py
rename to src/rewards/__init__.py
diff --git a/src/rewards/controller.py b/src/rewards/controller.py
new file mode 100644
index 0000000..92905cb
--- /dev/null
+++ b/src/rewards/controller.py
@@ -0,0 +1,158 @@
+import asyncio
+import logging
+from datetime import datetime
+from typing import Set, Union
+
+from aiohttp import ClientSession
+from eth_typing import BlockNumber, HexStr
+from web3 import Web3
+from web3.types import Timestamp, Wei
+
+from src.ipfs import submit_ipns_vote
+
+from .eth1 import SYNC_PERIOD, get_finalized_validators_public_keys
+from .eth2 import (
+ PENDING_STATUSES,
+ SECONDS_PER_EPOCH,
+ SLOTS_PER_EPOCH,
+ get_finality_checkpoints,
+ get_validator,
+)
+from .types import RewardsVote, RewardsVotingParameters
+
+logger = logging.getLogger(__name__)
+w3 = Web3()
+
+
+def format_ether(value: Union[str, int, Wei], sign="ETH") -> str:
+ """Converts Wei value to ETH."""
+ _value = int(value)
+ if _value < 0:
+ formatted_value = f'-{Web3.fromWei(abs(_value), "ether")}'
+ else:
+ formatted_value = f'{Web3.fromWei(_value, "ether")}'
+
+ return f"{formatted_value} {sign}" if sign else formatted_value
+
+
+class RewardsController(object):
+ """Updates total rewards and activated validators number."""
+
+ def __init__(
+ self, aiohttp_session: ClientSession, genesis_timestamp: int, ipns_key_id: str
+ ) -> None:
+ self.deposit_amount: Wei = Web3.toWei(32, "ether")
+ self.aiohttp_session = aiohttp_session
+ self.genesis_timestamp = genesis_timestamp
+ self.ipns_key_id = ipns_key_id
+
+ self.last_vote_total_rewards = None
+ self.last_vote_update_time = None
+
+ async def process(
+ self,
+ voting_params: RewardsVotingParameters,
+ current_block_number: BlockNumber,
+ current_timestamp: Timestamp,
+ ) -> None:
+ """Submits vote for the new total rewards and activated validators to the IPFS."""
+ # check whether it's voting time
+ last_update_time = datetime.utcfromtimestamp(
+ voting_params["rewards_updated_at_timestamp"]
+ )
+ next_update_time: datetime = last_update_time + SYNC_PERIOD
+ current_time: datetime = datetime.utcfromtimestamp(current_timestamp)
+ while next_update_time + SYNC_PERIOD <= current_time:
+ next_update_time += SYNC_PERIOD
+
+ # skip submitting vote if too early or vote has been already submitted
+ if (
+ next_update_time > current_time
+ or next_update_time == self.last_vote_update_time
+ ):
+ return
+
+ # fetch pool validator BLS public keys
+ public_keys: Set[HexStr] = await get_finalized_validators_public_keys(
+ current_block_number
+ )
+
+ # calculate current ETH2 epoch
+ update_timestamp = int(next_update_time.timestamp())
+ current_epoch: int = int(
+ (update_timestamp - self.genesis_timestamp) / SECONDS_PER_EPOCH
+ )
+
+ logger.info(
+ f"Voting for new total rewards with parameters:"
+ f" timestamp={update_timestamp}, epoch={current_epoch}"
+ )
+
+ # wait for the epoch to get finalized
+ checkpoints = await get_finality_checkpoints(self.aiohttp_session)
+ while current_epoch < int(checkpoints["finalized"]["epoch"]):
+ logger.info(f"Waiting for the epoch {current_epoch} to finalize...")
+ await asyncio.sleep(360)
+ checkpoints = await get_finality_checkpoints(self.aiohttp_session)
+
+ # TODO: execute in batch for validators that were already activated since last check
+ state_id = str(current_epoch * SLOTS_PER_EPOCH)
+ total_rewards: Wei = Wei(0)
+ activated_validators = 0
+ for public_key in public_keys:
+ validator = await get_validator(
+ session=self.aiohttp_session, public_key=public_key, state_id=state_id
+ )
+ if validator is None:
+ continue
+
+ total_rewards += Wei(
+ Web3.toWei(validator["balance"], "gwei") - self.deposit_amount
+ )
+ if validator["status"] not in PENDING_STATUSES:
+ activated_validators += 1
+
+ pretty_total_rewards = format_ether(total_rewards)
+ log_msg = f"Retrieved pool validator rewards: total={pretty_total_rewards}"
+
+ if (
+ self.last_vote_total_rewards is not None
+ and self.last_vote_update_time is not None
+ ):
+ log_msg += (
+ f", since last vote={format_ether((total_rewards - self.last_vote_total_rewards))},"
+ f" time elapsed="
+ f"{(next_update_time - self.last_vote_update_time).total_seconds()}"
+ )
+ logger.info(log_msg)
+
+ # submit vote
+ logger.info(
+ f"Submitting rewards vote:"
+ f" nonce={voting_params['rewards_nonce']},"
+ f" total rewards={pretty_total_rewards},"
+ f" activated validators={activated_validators}"
+ )
+
+ current_nonce = voting_params["rewards_nonce"]
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "uint256", "uint256"],
+ [current_nonce, activated_validators, total_rewards],
+ )
+ vote = RewardsVote(
+ timestamp=update_timestamp,
+ nonce=current_nonce,
+ activated_validators=activated_validators,
+ total_rewards=str(total_rewards),
+ )
+ ipns_record = submit_ipns_vote(
+ encoded_data=encoded_data, vote=vote, key_id=self.ipns_key_id
+ )
+ logger.info(
+ f"Rewards vote has been successfully submitted:"
+ f" ipfs={ipns_record['ipfs_id']},"
+ f" ipns={ipns_record['ipns_id']}"
+ )
+
+ self.last_vote_total_rewards = total_rewards
+ self.last_vote_update_time = next_update_time
diff --git a/src/rewards/eth1.py b/src/rewards/eth1.py
new file mode 100644
index 0000000..b839f8b
--- /dev/null
+++ b/src/rewards/eth1.py
@@ -0,0 +1,43 @@
+from datetime import timedelta
+from typing import Dict
+
+import backoff
+from web3.types import BlockNumber
+
+from src.clients import execute_graphql_query, sw_gql_client
+from src.graphql_queries import FINALIZED_VALIDATORS_QUERY
+
+from .types import FinalizedValidatorsPublicKeys
+
+SYNC_PERIOD = timedelta(days=1)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_finalized_validators_public_keys(
+ block_number: BlockNumber,
+) -> FinalizedValidatorsPublicKeys:
+ """Fetches pool validators public keys."""
+ last_id = ""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=FINALIZED_VALIDATORS_QUERY,
+ variables=dict(block_number=block_number, last_id=last_id),
+ )
+ validators_chunk = result.get("validators", [])
+ validators = validators_chunk
+
+ # accumulate chunks of validators
+ while len(validators_chunk) >= 1000:
+ last_id = validators_chunk[-1]["id"]
+ if not last_id:
+ break
+
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=FINALIZED_VALIDATORS_QUERY,
+ variables=dict(block_number=block_number, last_id=last_id),
+ )
+ validators_chunk = result.get("validators", [])
+ validators.extend(validators_chunk)
+
+ return set([val["id"] for val in validators])
diff --git a/src/rewards/eth2.py b/src/rewards/eth2.py
new file mode 100644
index 0000000..7b27ff5
--- /dev/null
+++ b/src/rewards/eth2.py
@@ -0,0 +1,71 @@
+from enum import Enum
+from typing import Dict, Union
+
+import backoff
+from aiohttp import ClientResponseError, ClientSession
+from eth_typing import HexStr
+
+from src.settings import ETH2_ENDPOINT
+
+
+class ValidatorStatus(Enum):
+ """Validator statuses in beacon chain"""
+
+ PENDING_INITIALIZED = "pending_initialized"
+ PENDING_QUEUED = "pending_queued"
+ ACTIVE_ONGOING = "active_ongoing"
+ ACTIVE_EXITING = "active_exiting"
+ ACTIVE_SLASHED = "active_slashed"
+ EXITED_UNSLASHED = "exited_unslashed"
+ EXITED_SLASHED = "exited_slashed"
+ WITHDRAWAL_POSSIBLE = "withdrawal_possible"
+ WITHDRAWAL_DONE = "withdrawal_done"
+
+
+PENDING_STATUSES = [ValidatorStatus.PENDING_INITIALIZED, ValidatorStatus.PENDING_QUEUED]
+SLOTS_PER_EPOCH = 32
+SECONDS_PER_SLOT = 12
+SECONDS_PER_EPOCH = SECONDS_PER_SLOT * SLOTS_PER_EPOCH
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_finality_checkpoints(
+ session: ClientSession, state_id: str = "head"
+) -> Dict:
+ """Fetches finality checkpoints."""
+ endpoint = f"{ETH2_ENDPOINT}/eth/v1/beacon/states/{state_id}/finality_checkpoints"
+ async with session.get(endpoint) as response:
+ response.raise_for_status()
+ return (await response.json())["data"]
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_validator(
+ session: ClientSession, public_key: HexStr, state_id: str = "head"
+) -> Union[Dict, None]:
+ """
+ Fetches validator.
+ :returns validator if exists or None if it doesn't
+ """
+ endpoint = (
+ f"{ETH2_ENDPOINT}/eth/v1/beacon/states/{state_id}/validators?id={public_key}"
+ )
+ try:
+ async with session.get(endpoint) as response:
+ response.raise_for_status()
+ return (await response.json())["data"][0]
+ except ClientResponseError as e:
+ if e.status == 400:
+ # validator does not exist
+ return None
+
+ raise e
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def get_genesis(session: ClientSession) -> Dict:
+ """Fetches beacon chain genesis."""
+ endpoint = f"{ETH2_ENDPOINT}/eth/v1/beacon/genesis"
+ async with session.get(endpoint) as response:
+ response.raise_for_status()
+ return (await response.json())["data"]
diff --git a/src/rewards/types.py b/src/rewards/types.py
new file mode 100644
index 0000000..a34d528
--- /dev/null
+++ b/src/rewards/types.py
@@ -0,0 +1,19 @@
+from typing import Set, TypedDict
+
+from eth_typing import HexStr
+from web3.types import Timestamp
+
+
+class RewardsVotingParameters(TypedDict):
+ rewards_nonce: int
+ rewards_updated_at_timestamp: Timestamp
+
+
+class RewardsVote(TypedDict):
+ timestamp: int
+ nonce: int
+ activated_validators: int
+ total_rewards: str
+
+
+FinalizedValidatorsPublicKeys = Set[HexStr]
diff --git a/src/settings.py b/src/settings.py
index cecdd7f..e4b86b6 100644
--- a/src/settings.py
+++ b/src/settings.py
@@ -1,162 +1,79 @@
-from os import environ
-from typing import Union
-
-from eth_typing.evm import ChecksumAddress
+from decouple import Choices, config
+from eth_typing import HexStr
+from ipfshttpclient import DEFAULT_ADDR
from web3 import Web3
-from web3.types import Wei
-
-LOG_LEVEL: str = environ.get("LOG_LEVEL", "INFO")
-# connections
-# use either WS or HTTP for Web3
-WEB3_WS_ENDPOINT: str = environ.get("WEB3_WS_ENDPOINT", "")
-WEB3_WS_ENDPOINT_TIMEOUT: int = int(environ.get("WEB3_WS_ENDPOINT_TIMEOUT", "60"))
-WEB3_HTTP_ENDPOINT: str = "" if WEB3_WS_ENDPOINT else environ["WEB3_HTTP_ENDPOINT"]
-BEACON_CHAIN_RPC_ENDPOINT: str = environ["BEACON_CHAIN_RPC_ENDPOINT"]
+LOG_LEVEL = config("LOG_LEVEL", default="INFO")
-# etherscan
-ETHERSCAN_ADDRESS_BASE_URL: str = environ.get(
- "ETHERSCAN_ADDRESS_BASE_URL", "https://etherscan.io/address/"
+# supported networks
+MAINNET = "mainnet"
+GOERLI = "goerli"
+NETWORK = config(
+ "NETWORK",
+ default=MAINNET,
+ cast=Choices([MAINNET, GOERLI], cast=lambda net: net.lower()),
)
-# used only in development
-INJECT_POA_MIDDLEWARE: bool = environ.get("INJECT_POA_MIDDLEWARE", "False") in (
- "true",
- "True",
-)
-
-# whether to check for stale blocks
-INJECT_STALE_CHECK_MIDDLEWARE: bool = environ.get(
- "INJECT_STALE_CHECK_MIDDLEWARE", "False"
-) in ("true", "True")
-STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY: Union[int, None] = None
-if INJECT_STALE_CHECK_MIDDLEWARE:
- STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY = int(
- environ["STALE_CHECK_MIDDLEWARE_ALLOWABLE_DELAY"]
- )
-
-# defines whether to enable sending telegram notifications
-SEND_TELEGRAM_NOTIFICATIONS: bool = environ.get(
- "SEND_TELEGRAM_NOTIFICATIONS", "False"
-) in ("True", "true")
-
-# whether to retry http or ws requests
-INJECT_RETRY_REQUEST_MIDDLEWARE: bool = environ.get(
- "INJECT_RETRY_REQUEST_MIDDLEWARE", "True"
-) in ("true", "True")
-
-# whether to store filters locally instead of server-side
-INJECT_LOCAL_FILTER_MIDDLEWARE: bool = environ.get(
- "INJECT_LOCAL_FILTER_MIDDLEWARE", "False"
-) in ("true", "True")
+IPFS_ENDPOINT = config("IPFS_ENDPOINT", default=DEFAULT_ADDR)
-# send warning notification on low balance
-BALANCE_WARNING_THRESHOLD: Wei = Web3.toWei(
- environ.get("BALANCE_WARNING_THRESHOLD", "0.1"), "ether"
+KEEPER_ORACLES_SOURCE_URL = config(
+ "KEEPER_ORACLES_SOURCE_URL", default="https://github.com/stakewise/keeper/README.md"
)
-# stop execution on too low balance
-BALANCE_ERROR_THRESHOLD: Wei = Web3.toWei(
- environ.get("BALANCE_ERROR_THRESHOLD", "0.05"), "ether"
-)
+ETH2_ENDPOINT = config("ETH2_ENDPOINT", default="https://eth2-beacon-mainnet.infura.io")
-# gas price strategy
-APPLY_GAS_PRICE_STRATEGY: bool = environ.get("APPLY_GAS_PRICE_STRATEGY", "True") in (
- "true",
- "True",
-)
-MAX_TX_WAIT_SECONDS: int = int(environ.get("MAX_TX_WAIT_SECONDS", "180"))
+ORACLE_PRIVATE_KEY = config("ORACLE_PRIVATE_KEY")
-# how long to wait for transaction to mine
-TRANSACTION_TIMEOUT: int = int(environ.get("TRANSACTION_TIMEOUT", "1800"))
+PROCESS_INTERVAL = config("PROCESS_INTERVAL", default=180, cast=int)
# required ETH1 confirmation blocks
-ETH1_CONFIRMATION_BLOCKS: int = int(environ.get("ETH1_CONFIRMATION_BLOCKS", "12"))
+ETH1_CONFIRMATION_BLOCKS: int = config("ETH1_CONFIRMATION_BLOCKS", default=15, cast=int)
-# required ETH2 confirmation epochs
-ETH2_CONFIRMATION_EPOCHS: int = int(environ.get("ETH2_CONFIRMATION_EPOCHS", "3"))
-
-# how long to wait before processing again (in seconds)
-PROCESS_INTERVAL: int = int(environ.get("PROCESS_INTERVAL", "300"))
-
-# how long to wait for other oracles to vote (in seconds)
-VOTING_TIMEOUT: int = int(environ.get("VOTING_TIMEOUT", "3600"))
-
-# delay in ETH1 blocks applied to the next update due to negative balance or no activated validators
-# ~1 hour with block time of 13 seconds
-SYNC_BLOCKS_DELAY: int = int(environ.get("SYNC_BLOCKS_DELAY", "277"))
-
-# number of ETH2 epochs that won't be possible to fetch from the node starting from the current epoch
-TOO_FAR_EPOCHS_SPAN: int = int(environ.get("TOO_FAR_EPOCHS_NUMBER", "8"))
-
-# maximum gas spent on oracle vote
-ORACLE_VOTE_GAS_LIMIT: Wei = Wei(int(environ.get("ORACLE_VOTE_GAS_LIMIT", "250000")))
-
-# contracts
-POOL_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get("POOL_CONTRACT_ADDRESS", "0xC874b064f465bdD6411D45734b56fac750Cda29A")
-)
-ORACLES_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "ORACLES_CONTRACT_ADDRESS", "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514"
+if NETWORK == MAINNET:
+ SWISE_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2"
)
-)
-DAO_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get("DAO_ADDRESS", "0x144a98cb1CdBb23610501fE6108858D9B7D24934")
-)
-REWARD_ETH_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "REWARD_ETH_CONTRACT_ADDRESS", "0x20BC832ca081b91433ff6c17f85701B6e92486c5"
+ REWARD_ETH_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0x20BC832ca081b91433ff6c17f85701B6e92486c5"
)
-)
-STAKED_ETH_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "STAKED_ETH_CONTRACT_ADDRESS", "0xFe2e637202056d30016725477c5da089Ab0A043A"
+ STAKED_ETH_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0xFe2e637202056d30016725477c5da089Ab0A043A"
)
-)
-MULTICALL_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "MULTICALL_CONTRACT_ADDRESS", "0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441"
+ DISTRIBUTOR_FALLBACK_ADDRESS = Web3.toChecksumAddress(
+ "0x144a98cb1CdBb23610501fE6108858D9B7D24934"
)
-)
-MERKLE_DISTRIBUTOR_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "MERKLE_DISTRIBUTOR_CONTRACT_ADDRESS",
- "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20",
+ WITHDRAWAL_CREDENTIALS: HexStr = HexStr(
+ "0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079"
)
-)
-BALANCER_VAULT_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "BALANCER_VAULT_CONTRACT_ADDRESS", "0xBA12222222228d8Ba445958a75a0704d566BF2C8"
+ STAKEWISE_SUBGRAPH_URL = config(
+ "STAKEWISE_SUBGRAPH_URL",
+ default="https://api.thegraph.com/subgraphs/name/stakewise/stakewise-mainnet",
)
-)
-
-# ENS
-ENS_RESOLVER_CONTRACT_ADDRESS: ChecksumAddress = Web3.toChecksumAddress(
- environ.get(
- "ENS_RESOLVER_CONTRACT_ADDRESS", "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41"
+ UNISWAP_V3_SUBGRAPH_URL = config(
+ "UNISWAP_V3_SUBGRAPH_URL",
+ default="https://api.thegraph.com/subgraphs/name/stakewise/uniswap-v3-mainnet",
+ )
+elif NETWORK == GOERLI:
+ SWISE_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0x0e2497aACec2755d831E4AFDEA25B4ef1B823855"
+ )
+ REWARD_ETH_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0x826f88d423440c305D9096cC1581Ae751eFCAfB0"
+ )
+ STAKED_ETH_TOKEN_CONTRACT_ADDRESS = Web3.toChecksumAddress(
+ "0x221D9812823DBAb0F1fB40b0D294D9875980Ac19"
+ )
+ DISTRIBUTOR_FALLBACK_ADDRESS = Web3.toChecksumAddress(
+ "0x1867c96601bc5fE24F685d112314B8F3Fe228D5A"
+ )
+ WITHDRAWAL_CREDENTIALS: HexStr = HexStr(
+ "0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5"
+ )
+ STAKEWISE_SUBGRAPH_URL = config(
+ "STAKEWISE_SUBGRAPH_URL",
+ default="https://api.thegraph.com/subgraphs/name/stakewise/stakewise-goerli",
+ )
+ UNISWAP_V3_SUBGRAPH_URL = config(
+ "UNISWAP_V3_SUBGRAPH_URL",
+ default="https://api.thegraph.com/subgraphs/name/stakewise/uniswap-v3-goerli",
)
-)
-DAO_ENS_DOMAIN: str = environ.get("DAO_ENS_DOMAIN", "stakewise.eth")
-ORACLES_ENS_TEXT_RECORD: str = environ.get("ORACLES_ENS_TEXT_RECORD", "oraclesconfig")
-
-# Subgraphs
-BALANCER_SUBGRAPH_URL: str = environ.get(
- "BALANCER_SUBGRAPH_URL",
- "https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2",
-)
-UNISWAP_V2_SUBGRAPH_URL: str = environ.get(
- "UNISWAP_V2_SUBGRAPH_URL",
- "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2",
-)
-UNISWAP_V3_SUBGRAPH_URL: str = environ.get(
- "UNISWAP_V3_SUBGRAPH_URL",
- "https://api.thegraph.com/subgraphs/name/stakewise/uniswap-v3",
-)
-
-# IPFS
-IPFS_ENDPOINT: str = environ.get("IPFS_ENDPOINT", "/dns/ipfs.infura.io/tcp/5001/https")
-
-# credentials
-# TODO: consider reading from file
-ORACLE_PRIVATE_KEY: str = environ["ORACLE_PRIVATE_KEY"]
diff --git a/src/staking_rewards/__init__.py b/src/staking_rewards/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/staking_rewards/rewards.py b/src/staking_rewards/rewards.py
index dcb20e4..e69de29 100644
--- a/src/staking_rewards/rewards.py
+++ b/src/staking_rewards/rewards.py
@@ -1,306 +0,0 @@
-import logging
-import time
-from typing import Set
-
-from eth_typing.bls import BLSPubkey
-from web3 import Web3
-from web3.types import Wei, BlockNumber, Timestamp
-
-from contracts import (
- get_oracles_contract,
- get_pool_contract,
- get_reward_eth_contract,
- get_multicall_contract,
-)
-from src.settings import (
- BEACON_CHAIN_RPC_ENDPOINT,
- TRANSACTION_TIMEOUT,
- BALANCE_WARNING_THRESHOLD,
- BALANCE_ERROR_THRESHOLD,
- SEND_TELEGRAM_NOTIFICATIONS,
- ORACLE_VOTE_GAS_LIMIT,
- VOTING_TIMEOUT,
- SYNC_BLOCKS_DELAY,
- ETH1_CONFIRMATION_BLOCKS,
- ETH2_CONFIRMATION_EPOCHS,
- TOO_FAR_EPOCHS_SPAN,
-)
-from src.staking_rewards.utils import (
- get_validator_stub,
- get_beacon_chain_stub,
- get_node_stub,
- get_chain_config,
- get_genesis_timestamp,
- get_pool_validator_public_keys,
- ValidatorStatus,
- get_pool_validator_statuses,
- get_validators_total_balance,
- submit_oracle_rewards_vote,
- get_rewards_voting_parameters,
- get_sync_period,
-)
-from src.utils import (
- get_block,
- get_latest_block_number,
- check_oracle_has_vote,
- check_default_account_balance,
- wait_for_oracles_nonce_update,
-)
-
-ACTIVATED_STATUSES = [
- ValidatorStatus.ACTIVE,
- ValidatorStatus.EXITING,
- ValidatorStatus.SLASHING,
- ValidatorStatus.EXITED,
-]
-
-ACTIVATING_STATUSES = [
- ValidatorStatus.UNKNOWN_STATUS,
- ValidatorStatus.PENDING,
- ValidatorStatus.DEPOSITED,
-]
-
-logger = logging.getLogger(__name__)
-
-
-class Rewards(object):
- """Updates total rewards and activated validators number."""
-
- def __init__(self, w3: Web3) -> None:
- self.w3 = w3
- self.pool = get_pool_contract(w3)
- logger.info(f"Pool contract address: {self.pool.address}")
-
- self.reward_eth_token = get_reward_eth_contract(w3)
- logger.info(
- f"Reward ETH Token contract address: {self.reward_eth_token.address}"
- )
-
- self.multicall_contract = get_multicall_contract(w3)
- logger.info(f"Multicall contract address: {self.multicall_contract.address}")
-
- self.oracles = get_oracles_contract(w3)
- logger.info(f"Oracles contract address: {self.oracles.address}")
-
- self.validator_stub = get_validator_stub(BEACON_CHAIN_RPC_ENDPOINT)
- self.beacon_chain_stub = get_beacon_chain_stub(BEACON_CHAIN_RPC_ENDPOINT)
- logger.info(f"Beacon chain RPC endpoint: {BEACON_CHAIN_RPC_ENDPOINT}")
-
- node_stub = get_node_stub(BEACON_CHAIN_RPC_ENDPOINT)
- self.genesis_timestamp: int = get_genesis_timestamp(node_stub)
-
- chain_config = get_chain_config(self.beacon_chain_stub)
- self.slots_per_epoch = int(chain_config["SlotsPerEpoch"])
- self.seconds_per_epoch: int = (
- int(chain_config["SecondsPerSlot"]) * self.slots_per_epoch
- )
- self.deposit_amount: Wei = self.w3.toWei(
- int(chain_config["MaxEffectiveBalance"]), "gwei"
- )
-
- self.blocks_delay: BlockNumber = BlockNumber(0)
-
- def process(self) -> None:
- """Submits off-chain data for total rewards and activated validators to `Oracles` contract."""
-
- # fetch current block number adjusted based on the number of confirmation blocks
- current_block_number: BlockNumber = get_latest_block_number(
- w3=self.w3, confirmation_blocks=ETH1_CONFIRMATION_BLOCKS
- )
-
- # fetch voting parameters
- (
- is_voting,
- is_paused,
- current_nonce,
- last_update_block_number,
- last_total_rewards,
- ) = get_rewards_voting_parameters(
- multicall=self.multicall_contract,
- oracles=self.oracles,
- reward_eth_token=self.reward_eth_token,
- block_number=current_block_number,
- )
-
- # check whether it's voting time
- if not is_voting:
- return
-
- if is_paused:
- logger.info("Skipping rewards update as Oracles contract is paused")
- return
-
- # TODO: fetch sync period from `last_update_block_number` after the first rewards update
- # fetch the sync period in number of blocks at the time of last update block number
- sync_period: int = get_sync_period(self.oracles, "latest")
-
- # calculate next sync block number
- if not last_update_block_number:
- # if it's the first update, increment based on the ETH2 genesis time
- # assumes every ETH1 block is 13 seconds
- next_sync_block_number: BlockNumber = BlockNumber(
- (self.genesis_timestamp // 13) + sync_period
- )
- else:
- next_sync_block_number: BlockNumber = BlockNumber(
- last_update_block_number + sync_period
- )
-
- # apply blocks delay if any
- next_sync_block_number += self.blocks_delay
-
- # if more than 1 update was skipped -> catch up close to the current block
- while next_sync_block_number + sync_period < current_block_number:
- next_sync_block_number += sync_period
-
- if next_sync_block_number > current_block_number:
- # skip updating if the time hasn't come yet
- return
-
- # calculate finalized epoch to fetch validator balances at
- next_sync_timestamp: Timestamp = get_block(
- w3=self.w3, block_number=next_sync_block_number
- )["timestamp"]
-
- # calculate ETH2 epoch to fetch validator balances at
- # reduce by the number of the maximum ETH2 justified epochs
- epoch: int = (
- int((next_sync_timestamp - self.genesis_timestamp) / self.seconds_per_epoch)
- - ETH2_CONFIRMATION_EPOCHS
- )
- logger.info(
- f"Voting for new total rewards with parameters:"
- f" block number={next_sync_block_number}, epoch={epoch}"
- )
- current_epoch: int = int(
- (int(time.time()) - self.genesis_timestamp) / self.seconds_per_epoch
- )
-
- if epoch < current_epoch - TOO_FAR_EPOCHS_SPAN:
- # Wait for next update round as the required epoch is too far behind
- logger.info("Waiting for the next rewards update...")
- return
-
- # fetch pool validator BLS public keys
- public_keys: Set[BLSPubkey] = get_pool_validator_public_keys(
- pool_contract=self.pool, block_number=next_sync_block_number
- )
-
- # fetch activated validators from the beacon chain
- validator_statuses = get_pool_validator_statuses(
- stub=self.validator_stub, public_keys=public_keys
- )
- activated_public_keys: Set[BLSPubkey] = set()
- for i, public_key in enumerate(validator_statuses.public_keys): # type: ignore
- status_response = validator_statuses.statuses[i] # type: ignore
- status = ValidatorStatus(status_response.status)
-
- # filter out only validator public keys with activated statuses
- if (
- status in ACTIVATED_STATUSES
- and status_response.activation_epoch <= epoch
- ):
- activated_public_keys.add(public_key)
-
- activated_validators = len(activated_public_keys)
- if not activated_validators:
- logger.warning(
- f"Delaying rewards update by {SYNC_BLOCKS_DELAY} blocks as there are no activated validators"
- )
- self.blocks_delay += SYNC_BLOCKS_DELAY
- return
-
- logger.info(
- f"Retrieving balances for {activated_validators} / {len(public_keys)}"
- f" activated validators at epoch={epoch}"
- )
- activated_total_balance = get_validators_total_balance(
- stub=self.beacon_chain_stub,
- epoch=epoch,
- public_keys=activated_public_keys,
- )
-
- # calculate new rewards
- total_rewards: Wei = Wei(
- activated_total_balance - (activated_validators * self.deposit_amount)
- )
- if total_rewards < 0:
- pretty_total_rewards = (
- f'-{self.w3.fromWei(abs(total_rewards), "ether")} ETH'
- )
- else:
- pretty_total_rewards = f'{self.w3.fromWei(total_rewards, "ether")} ETH'
-
- period_rewards: Wei = Wei(total_rewards - last_total_rewards)
- if period_rewards < 0:
- pretty_period_rewards = (
- f'-{self.w3.fromWei(abs(period_rewards), "ether")} ETH'
- )
- else:
- pretty_period_rewards = f'{self.w3.fromWei(period_rewards, "ether")} ETH'
- logger.info(
- f"Retrieved pool validator rewards:"
- f" total={pretty_total_rewards}, period={pretty_period_rewards}"
- )
-
- # delay updating rewards in case they are negative
- if period_rewards <= 0:
- logger.warning(
- f"Delaying updating rewards by {SYNC_BLOCKS_DELAY} seconds:"
- f" period rewards={pretty_period_rewards}"
- )
- self.blocks_delay += SYNC_BLOCKS_DELAY
- return
-
- # reset delay if voting
- self.blocks_delay = 0
-
- # generate candidate ID
- encoded_data: bytes = self.w3.codec.encode_abi(
- ["uint256", "uint256", "uint256"],
- [current_nonce, total_rewards, activated_validators],
- )
- candidate_id: bytes = self.w3.keccak(primitive=encoded_data)
-
- # check whether has not voted yet for candidate
- if not check_oracle_has_vote(
- oracles=self.oracles,
- oracle=self.w3.eth.default_account, # type: ignore
- candidate_id=candidate_id,
- block_number=current_block_number,
- ):
- # submit vote
- logger.info(
- f"Submitting rewards vote:"
- f" nonce={current_nonce},"
- f" total rewards={pretty_total_rewards},"
- f" activated validators={activated_validators}"
- )
- submit_oracle_rewards_vote(
- oracles=self.oracles,
- total_rewards=total_rewards,
- activated_validators=activated_validators,
- current_nonce=current_nonce,
- transaction_timeout=TRANSACTION_TIMEOUT,
- gas=ORACLE_VOTE_GAS_LIMIT,
- confirmation_blocks=ETH1_CONFIRMATION_BLOCKS,
- )
- logger.info("Rewards vote has been successfully submitted")
-
- # wait until enough votes will be submitted and value updated
- wait_for_oracles_nonce_update(
- w3=self.w3,
- oracles=self.oracles,
- confirmation_blocks=ETH1_CONFIRMATION_BLOCKS,
- timeout=VOTING_TIMEOUT,
- current_nonce=current_nonce,
- )
- logger.info("Oracles have successfully voted for the same rewards")
-
- # check oracle balance
- if SEND_TELEGRAM_NOTIFICATIONS:
- check_default_account_balance(
- w3=self.w3,
- warning_amount=BALANCE_WARNING_THRESHOLD,
- error_amount=BALANCE_ERROR_THRESHOLD,
- )
diff --git a/src/staking_rewards/utils.py b/src/staking_rewards/utils.py
deleted file mode 100644
index 286bdd2..0000000
--- a/src/staking_rewards/utils.py
+++ /dev/null
@@ -1,290 +0,0 @@
-from enum import Enum
-
-import logging
-import time
-from eth_typing.bls import BLSPubkey
-from google.protobuf import empty_pb2
-from grpc import insecure_channel, RpcError, StatusCode
-from tenacity import retry, Retrying
-from tenacity.before_sleep import before_sleep_log
-from typing import Set, Dict, Tuple
-from web3 import Web3
-from web3.contract import Contract, ContractFunction
-from web3.exceptions import ContractLogicError
-from web3.types import Wei, BlockNumber, Timestamp, BlockIdentifier
-
-from proto.eth.v1alpha1.beacon_chain_pb2 import ListValidatorBalancesRequest
-from proto.eth.v1alpha1.beacon_chain_pb2_grpc import BeaconChainStub
-from proto.eth.v1alpha1.node_pb2_grpc import NodeStub
-from proto.eth.v1alpha1.validator_pb2 import (
- MultipleValidatorStatusRequest,
- MultipleValidatorStatusResponse,
-)
-from proto.eth.v1alpha1.validator_pb2_grpc import BeaconNodeValidatorStub
-from src.utils import (
- logger,
- backoff,
- stop_attempts,
- InterruptHandler,
- wait_for_transaction,
-)
-
-
-class ValidatorStatus(Enum):
- """Validator statuses in beacon chain"""
-
- UNKNOWN_STATUS = 0
- DEPOSITED = 1
- PENDING = 2
- ACTIVE = 3
- EXITING = 4
- SLASHING = 5
- EXITED = 6
- INVALID = 7
- PARTIALLY_DEPOSITED = 8
-
-
-def get_validator_stub(rpc_endpoint: str) -> BeaconNodeValidatorStub:
- """Instantiates beacon node validator stub."""
- channel = insecure_channel(rpc_endpoint)
- return BeaconNodeValidatorStub(channel)
-
-
-def get_beacon_chain_stub(rpc_endpoint: str) -> BeaconChainStub:
- """Instantiates beacon chain stub."""
- channel = insecure_channel(rpc_endpoint)
- return BeaconChainStub(channel)
-
-
-def get_node_stub(rpc_endpoint: str) -> NodeStub:
- """Instantiates node stub."""
- channel = insecure_channel(rpc_endpoint)
- return NodeStub(channel)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_chain_config(stub: BeaconChainStub) -> Dict[str, str]:
- """Fetches beacon chain configuration."""
- response = stub.GetBeaconConfig(empty_pb2.Empty())
- return response.config
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_rewards_voting_parameters(
- reward_eth_token: Contract,
- oracles: Contract,
- multicall: Contract,
- block_number: BlockNumber,
-) -> Tuple[bool, bool, int, BlockNumber, Wei]:
- """Fetches rewards voting parameters."""
- calls = [
- dict(target=oracles.address, callData=oracles.encodeABI("isRewardsVoting")),
- dict(target=oracles.address, callData=oracles.encodeABI("paused")),
- dict(target=oracles.address, callData=oracles.encodeABI("currentNonce")),
- dict(
- target=reward_eth_token.address,
- callData=reward_eth_token.encodeABI("lastUpdateBlockNumber"),
- ),
- dict(
- target=reward_eth_token.address,
- callData=reward_eth_token.encodeABI("totalSupply"),
- ),
- ]
- response = multicall.functions.aggregate(calls).call(block_identifier=block_number)[
- 1
- ]
- return (
- bool(Web3.toInt(response[0])),
- bool(Web3.toInt(response[1])),
- Web3.toInt(response[2]),
- Web3.toInt(response[3]),
- Web3.toInt(response[4]),
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_sync_period(
- oracles: Contract, block_identifier: BlockIdentifier = "latest"
-) -> BlockNumber:
- """Fetches sync period from the `Oracles` contract."""
- return oracles.functions.syncPeriod().call(block_identifier=block_identifier)
-
-
-def submit_oracle_rewards_vote(
- oracles: Contract,
- total_rewards: Wei,
- activated_validators: int,
- current_nonce: int,
- transaction_timeout: int,
- gas: Wei,
- confirmation_blocks: int,
-) -> None:
- """Submits new total rewards vote to `Oracles` contract."""
- for attempt in Retrying(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
- ):
- with attempt:
- account_nonce = oracles.web3.eth.getTransactionCount(
- oracles.web3.eth.default_account
- )
- try:
- # check whether gas price can be estimated for the the vote
- oracles.functions.voteForRewards(
- current_nonce, total_rewards, activated_validators
- ).estimateGas({"gas": gas, "nonce": account_nonce})
- except ContractLogicError as e:
- # check whether nonce has changed -> new rewards were already submitted
- if current_nonce != oracles.functions.currentNonce().call():
- return
- raise e
-
- tx_hash = oracles.functions.voteForRewards(
- current_nonce, total_rewards, activated_validators
- ).transact({"gas": gas, "nonce": account_nonce})
-
- wait_for_transaction(
- oracles=oracles,
- tx_hash=tx_hash,
- timeout=transaction_timeout,
- confirmation_blocks=confirmation_blocks,
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_genesis_timestamp(stub: NodeStub) -> Timestamp:
- """Fetches beacon chain genesis timestamp."""
- return stub.GetGenesis(empty_pb2.Empty()).genesis_time.ToSeconds()
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_pool_validator_public_keys(
- pool_contract: Contract, block_number: BlockNumber
-) -> Set[BLSPubkey]:
- """Fetches pool validator public keys."""
- events = pool_contract.events.ValidatorRegistered.getLogs(
- fromBlock=0, toBlock=block_number
- )
- return set(event["args"]["publicKey"] for event in events)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_pool_validator_statuses(
- stub: BeaconNodeValidatorStub, public_keys: Set[BLSPubkey]
-) -> MultipleValidatorStatusResponse: # type: ignore
- """Fetches pool validator statuses from the beacon chain."""
- return stub.MultipleValidatorStatus(
- MultipleValidatorStatusRequest(public_keys=public_keys)
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_validators_total_balance(
- stub: BeaconChainStub, epoch: int, public_keys: Set[BLSPubkey]
-) -> Wei:
- """Fetches total balance of the validators."""
- request = ListValidatorBalancesRequest(epoch=epoch, public_keys=public_keys)
- total_balance: Wei = Wei(0)
- while True:
- response = stub.ListValidatorBalances(request)
-
- for balance_response in response.balances:
- total_balance = Wei(
- total_balance + int(Web3.toWei(balance_response.balance, "gwei"))
- )
-
- if not response.next_page_token:
- break
-
- request = ListValidatorBalancesRequest(
- epoch=epoch,
- public_keys=public_keys,
- page_token=response.next_page_token,
- )
-
- return total_balance
-
-
-def wait_contracts_ready(
- test_query: ContractFunction,
- interrupt_handler: InterruptHandler,
- process_interval: int,
-) -> None:
- """
- Wait that smart contracts are ready to for interactions.
- """
- while not interrupt_handler.exit:
- try:
- # This will bomb with ContractLogicError if contract are not ready
- test_query.call()
- break
- except ContractLogicError:
- logger.warning("Waiting for contracts to be upgraded...")
-
- time.sleep(process_interval)
-
-
-def wait_prysm_ready(
- interrupt_handler: InterruptHandler,
- endpoint: str,
- process_interval: int,
-) -> None:
- """
- Wait that Prysm accepts requests and is synced.
- Prysm RPC APIs return unavailable until Prysm is synced.
- """
- beacon_chain_stub = get_beacon_chain_stub(endpoint)
- while not interrupt_handler.exit:
- try:
- # This will bomb with RPC error if Prysm is not ready
- beacon_chain_stub.GetBeaconConfig(empty_pb2.Empty())
- break
- except RpcError as e:
- code = e.code()
- if code == StatusCode.UNAVAILABLE:
- logger.warning(
- f"Could not connect to {endpoint} gRPC endpoint. "
- f"Maybe Prysm node is not synced? "
- f"Will keep trying every {process_interval} seconds."
- )
- else:
- logger.warning(f"Unknown gRPC error connecting to Prysm: {e}")
-
- time.sleep(process_interval)
diff --git a/src/utils.py b/src/utils.py
deleted file mode 100644
index c13a368..0000000
--- a/src/utils.py
+++ /dev/null
@@ -1,271 +0,0 @@
-import decimal
-import logging
-import signal
-import time
-from asyncio.exceptions import TimeoutError
-from typing import Union, Any, Callable
-
-from eth_typing.evm import ChecksumAddress
-from hexbytes.main import HexBytes
-from notifiers.core import get_notifier # type: ignore
-from tenacity import ( # type: ignore
- retry,
- stop_after_attempt,
- wait_fixed,
- wait_random,
-)
-from tenacity.before_sleep import before_sleep_log
-from web3 import Web3
-from web3.contract import Contract
-from web3.gas_strategies.time_based import construct_time_based_gas_price_strategy
-
-# noinspection PyProtectedMember
-from web3.middleware.cache import (
- _time_based_cache_middleware,
- _latest_block_based_cache_middleware,
- _simple_cache_middleware,
-)
-from web3.middleware.exception_retry_request import exception_retry_middleware
-from web3.middleware.exception_retry_request import http_retry_request_middleware
-from web3.middleware.filter import local_filter_middleware
-from web3.middleware.geth_poa import geth_poa_middleware
-from web3.middleware.signing import construct_sign_and_send_raw_middleware
-from web3.middleware.stalecheck import make_stalecheck_middleware
-from web3.types import RPCEndpoint, Wei, BlockNumber, BlockData
-from websockets import ConnectionClosedError
-
-telegram = get_notifier("telegram")
-logger = logging.getLogger(__name__)
-
-backoff = wait_fixed(3) + wait_random(0, 10)
-stop_attempts = stop_after_attempt(100)
-
-
-class InterruptHandler:
- """
- Tracks SIGINT and SIGTERM signals.
- https://stackoverflow.com/a/31464349
- """
-
- exit = False
-
- def __init__(self) -> None:
- signal.signal(signal.SIGINT, self.exit_gracefully)
- signal.signal(signal.SIGTERM, self.exit_gracefully)
-
- # noinspection PyUnusedLocal
- def exit_gracefully(self, signum: int, frame: Any) -> None:
- logger.info(f"Received interrupt signal {signum}, exiting...")
- self.exit = True
-
-
-def ws_retry_request_middleware(
- make_request: Callable[[RPCEndpoint, Any], Any], web3: "Web3"
-) -> Callable[[RPCEndpoint, Any], Any]:
- return exception_retry_middleware(
- make_request, web3, (ConnectionClosedError, TimeoutError)
- )
-
-
-def get_web3_client(
- http_endpoint: str = "",
- ws_endpoint: str = "",
- ws_endpoint_timeout: int = 60,
- apply_gas_price_strategy: bool = False,
- max_tx_wait_seconds: int = 120,
- inject_retry_request: bool = False,
- inject_poa: bool = False,
- inject_local_filter: bool = False,
- inject_stale_check: bool = False,
- stale_check_allowable_delay: Union[int, None] = None,
-) -> Web3:
- """Returns instance of the Web3 client."""
- # Either http or ws endpoint must be provided (prefer ws over http)
- if ws_endpoint:
- w3 = Web3(
- Web3.WebsocketProvider(ws_endpoint, websocket_timeout=ws_endpoint_timeout)
- )
- logger.info(f"Using Web3 websocket endpoint {ws_endpoint}")
-
- if inject_retry_request:
- w3.middleware_onion.add(ws_retry_request_middleware)
- logger.info("Injected request retry middleware")
- else:
- w3 = Web3(Web3.HTTPProvider(http_endpoint))
- logger.info(f"Using Web3 HTTP endpoint {http_endpoint}")
-
- if inject_retry_request:
- w3.middleware_onion.add(http_retry_request_middleware)
- logger.info("Injected request retry middleware")
-
- if inject_poa:
- w3.middleware_onion.inject(geth_poa_middleware, layer=0)
- logger.info("Injected POA middleware")
-
- if inject_stale_check and stale_check_allowable_delay is not None:
- stale_check_middleware = make_stalecheck_middleware(stale_check_allowable_delay)
- w3.middleware_onion.add(stale_check_middleware)
- logger.info("Injected stale check middleware")
-
- if inject_local_filter:
- w3.middleware_onion.add(local_filter_middleware)
- logger.info("Injected local filter middleware")
-
- if apply_gas_price_strategy:
- w3.eth.set_gas_price_strategy(
- construct_time_based_gas_price_strategy(
- max_wait_seconds=max_tx_wait_seconds,
- weighted=True,
- sample_size=120,
- )
- )
- w3.middleware_onion.add(_time_based_cache_middleware)
- w3.middleware_onion.add(_latest_block_based_cache_middleware)
- w3.middleware_onion.add(_simple_cache_middleware)
- logger.info(f"Set gas price strategy with {max_tx_wait_seconds} wait seconds")
-
- return w3
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def check_default_account_balance(
- w3: Web3, warning_amount: Wei, error_amount: Wei
-) -> Union[int, decimal.Decimal]:
- """Returns the default account current balance."""
- balance = w3.eth.getBalance(w3.eth.default_account)
- if balance < error_amount:
- telegram.notify(
- message=f"`{w3.eth.default_account}` account has run out of balance:"
- f' `{Web3.fromWei(balance, "ether")} ETH` left',
- parse_mode="markdown",
- raise_on_errors=True,
- )
- raise RuntimeError(f"{w3.eth.default_account} account has run out of balance!")
-
- eth_value = Web3.fromWei(balance, "ether")
- if balance < warning_amount:
- telegram.notify(
- message=f"`{w3.eth.default_account}` account is running out of balance:"
- f" `{eth_value} ETH` left",
- parse_mode="markdown",
- raise_on_errors=True,
- )
- return eth_value
-
-
-def configure_default_account(w3: Web3, private_key: str) -> ChecksumAddress:
- """Sets default account for interacting with smart contracts."""
- account = w3.eth.account.from_key(private_key)
- w3.middleware_onion.add(construct_sign_and_send_raw_middleware(account))
- logger.warning("Injected middleware for capturing transactions and sending as raw")
-
- w3.eth.default_account = account.address
- logger.info(f"Configured default account {w3.eth.default_account}")
-
- return account.address
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def check_oracle_has_vote(
- oracles: Contract,
- oracle: ChecksumAddress,
- candidate_id: bytes,
- block_number: BlockNumber,
-) -> bool:
- """Checks whether oracle has submitted a vote."""
- return oracles.functions.hasVote(oracle, candidate_id).call(
- block_identifier=block_number
- )
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_latest_block_number(w3: Web3, confirmation_blocks: int) -> BlockNumber:
- """Gets the latest block number."""
- return BlockNumber(max(w3.eth.block_number - confirmation_blocks, 0))
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_block(w3: Web3, block_number: BlockNumber) -> BlockData:
- """Fetch the specific block."""
- return w3.eth.get_block(block_number)
-
-
-@retry(
- reraise=True,
- wait=backoff,
- stop=stop_attempts,
- before_sleep=before_sleep_log(logger, logging.WARNING),
-)
-def get_current_nonce(oracles: Contract, block_number: BlockNumber) -> int:
- """Fetches current nonce from the `Oracles` contract."""
- return oracles.functions.currentNonce().call(block_identifier=block_number)
-
-
-def wait_for_oracles_nonce_update(
- w3: Web3,
- oracles: Contract,
- confirmation_blocks: int,
- timeout: int,
- current_nonce: int,
-) -> None:
- """Waits until the nonce will be updated for the oracles."""
- current_block_number = get_latest_block_number(
- w3=w3, confirmation_blocks=confirmation_blocks
- )
- new_nonce = get_current_nonce(oracles=oracles, block_number=current_block_number)
- while current_nonce == new_nonce:
- if timeout <= 0:
- raise RuntimeError("Timed out waiting for other oracles' votes")
-
- logger.info("Waiting for other oracles to vote...")
- time.sleep(10)
- current_block_number = get_latest_block_number(
- w3=w3, confirmation_blocks=confirmation_blocks
- )
- new_nonce = get_current_nonce(
- oracles=oracles, block_number=current_block_number
- )
- timeout -= 10
-
-
-def wait_for_transaction(
- oracles: Contract,
- tx_hash: HexBytes,
- confirmation_blocks: int,
- timeout: int,
-) -> None:
- """Waits for transaction to be mined"""
- receipt = oracles.web3.eth.wait_for_transaction_receipt(
- transaction_hash=tx_hash, timeout=timeout, poll_latency=5
- )
- confirmation_block: BlockNumber = receipt["blockNumber"] + confirmation_blocks
- current_block: BlockNumber = oracles.web3.eth.block_number
- while confirmation_block > current_block:
- logger.info(
- f"Waiting for {confirmation_block - current_block} confirmation blocks..."
- )
- time.sleep(15)
-
- receipt = oracles.web3.eth.get_transaction_receipt(tx_hash)
- confirmation_block = receipt["blockNumber"] + confirmation_blocks
- current_block = oracles.web3.eth.block_number
diff --git a/src/merkle_distributor/__init__.py b/src/validators/__init__.py
similarity index 100%
rename from src/merkle_distributor/__init__.py
rename to src/validators/__init__.py
diff --git a/src/validators/controller.py b/src/validators/controller.py
new file mode 100644
index 0000000..fb7c790
--- /dev/null
+++ b/src/validators/controller.py
@@ -0,0 +1,117 @@
+import logging
+
+from eth_typing import BlockNumber
+from web3 import Web3
+from web3.types import Wei
+
+from src.ipfs import submit_ipns_vote
+
+from .eth1 import can_finalize_validator, select_validator
+from .ipfs import get_last_vote_public_key
+from .types import (
+ FinalizeValidatorVotingParameters,
+ InitializeValidatorVotingParameters,
+ ValidatorVote,
+)
+
+logger = logging.getLogger(__name__)
+w3 = Web3()
+
+
+class ValidatorsController(object):
+ """Submits new validators registrations to the IPFS."""
+
+ def __init__(self, initialize_ipns_key_id: str, finalize_ipns_key_id: str) -> None:
+ self.initialize_ipns_key_id = initialize_ipns_key_id
+ self.finalize_ipns_key_id = finalize_ipns_key_id
+ self.validator_deposit: Wei = Web3.toWei(32, "ether")
+
+ self.last_vote_public_key = get_last_vote_public_key(initialize_ipns_key_id)
+ self.last_finalized_public_key = get_last_vote_public_key(finalize_ipns_key_id)
+
+ async def initialize(
+ self,
+ voting_params: InitializeValidatorVotingParameters,
+ current_block_number: BlockNumber,
+ ) -> None:
+ """Decides on the operator to host the next validator and submits the vote to the IPFS."""
+ pool_balance = voting_params["pool_balance"]
+ if pool_balance < self.validator_deposit:
+ # not enough balance to initiate next validator
+ return
+
+ # select next validator
+ # TODO: implement scoring system based on the operators performance
+ validator = await select_validator(current_block_number)
+ if validator is None:
+ logger.warning("Failed to find the next validator to initialize")
+ return
+
+ public_key = validator["public_key"]
+ if self.last_vote_public_key == public_key:
+ # already voted for the validator initialization
+ return
+
+ # submit vote
+ current_nonce = voting_params["validators_nonce"]
+ operator = validator["operator"]
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "bytes", "address"],
+ [current_nonce, public_key, operator],
+ )
+ vote = ValidatorVote(
+ nonce=current_nonce, operator=operator, public_key=public_key
+ )
+ logger.info(
+ f"Voting for the next validator initialization: operator={operator}, public key={public_key}"
+ )
+
+ ipns_record = submit_ipns_vote(
+ encoded_data=encoded_data, vote=vote, key_id=self.initialize_ipns_key_id
+ )
+ logger.info(
+ f"Submitted validator initialization vote:"
+ f' ipfs={ipns_record["ipfs_id"]}, ipns={ipns_record["ipns_id"]}'
+ )
+
+ # skip voting for the same validator in the next check
+ self.last_vote_public_key = public_key
+
+ async def finalize(self, voting_params: FinalizeValidatorVotingParameters) -> None:
+ """Decides on the operator to host the next validator and submits the vote to the IPFS."""
+ current_public_key = voting_params["public_key"]
+ if current_public_key in (None, self.last_finalized_public_key):
+ # already voted for the validator with the current public key or no validator to finalize
+ return
+
+ can_finalize = await can_finalize_validator(current_public_key)
+ if not can_finalize:
+ logger.warning(
+ f"Cannot finalize validator registration: public key={current_public_key}"
+ )
+ self.last_finalized_public_key = current_public_key
+ return
+
+ # submit vote
+ current_nonce = voting_params["validators_nonce"]
+ operator = voting_params["operator"]
+ encoded_data: bytes = w3.codec.encode_abi(
+ ["uint256", "bytes", "address"],
+ [current_nonce, current_public_key, operator],
+ )
+ vote = ValidatorVote(
+ nonce=current_nonce, operator=operator, public_key=current_public_key
+ )
+ logger.info(
+ f"Voting for the next validator finalization: operator={operator}, public key={current_public_key}"
+ )
+
+ ipns_record = submit_ipns_vote(
+ encoded_data=encoded_data, vote=vote, key_id=self.finalize_ipns_key_id
+ )
+ logger.info(
+ f"Submitted validator finalization vote:"
+ f' ipfs={ipns_record["ipfs_id"]}, ipns={ipns_record["ipns_id"]}'
+ )
+
+ self.last_finalized_public_key = current_public_key
diff --git a/src/validators/eth1.py b/src/validators/eth1.py
new file mode 100644
index 0000000..7c5d680
--- /dev/null
+++ b/src/validators/eth1.py
@@ -0,0 +1,55 @@
+from typing import Dict, Union
+
+import backoff
+from eth_typing import HexStr
+from web3 import Web3
+from web3.types import BlockNumber
+
+from src.clients import execute_graphql_query, sw_gql_client
+from src.graphql_queries import OPERATORS_QUERY, VALIDATOR_REGISTRATIONS_QUERY
+from src.settings import WITHDRAWAL_CREDENTIALS
+
+from .ipfs import get_validator_deposit_data_public_key
+from .types import Validator
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def select_validator(block_number: BlockNumber) -> Union[None, Validator]:
+ """Selects operator to initiate validator registration for."""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=OPERATORS_QUERY,
+ variables=dict(
+ block_number=block_number,
+ ),
+ )
+ operators = result["operators"]
+ for operator in operators:
+ merkle_proofs = operator["initializeMerkleProofs"]
+ if not merkle_proofs:
+ continue
+
+ operator_address = Web3.toChecksumAddress(operator["id"])
+ deposit_data_index = int(operator["depositDataIndex"])
+ public_key = get_validator_deposit_data_public_key(
+ merkle_proofs, deposit_data_index
+ )
+ if public_key is not None:
+ return Validator(operator=operator_address, public_key=public_key)
+
+ return None
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+async def can_finalize_validator(block_number: BlockNumber, public_key: HexStr) -> bool:
+ """Checks whether it's safe to finalize the validator registration."""
+ result: Dict = await execute_graphql_query(
+ client=sw_gql_client,
+ query=VALIDATOR_REGISTRATIONS_QUERY,
+ variables=dict(block_number=block_number, public_key=public_key),
+ )
+ registrations = result["validatorRegistrations"]
+ if len(registrations) != 1:
+ return False
+
+ return registrations[0]["withdrawalCredentials"] == WITHDRAWAL_CREDENTIALS
diff --git a/src/validators/ipfs.py b/src/validators/ipfs.py
new file mode 100644
index 0000000..9332520
--- /dev/null
+++ b/src/validators/ipfs.py
@@ -0,0 +1,40 @@
+import logging
+from typing import Union
+
+import backoff
+import ipfshttpclient
+from eth_typing import HexStr
+from ipfshttpclient.exceptions import ErrorResponse
+
+from src.settings import IPFS_ENDPOINT
+
+from .types import ValidatorVote
+
+logger = logging.getLogger(__name__)
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def get_last_vote_public_key(ipns_id: str) -> Union[None, HexStr]:
+ """Fetches the last vote validator public key."""
+ ipns_id = ipns_id.replace("ipns://", "").replace("/ipns/", "")
+ try:
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ ipfs_id = client.name.resolve(name=ipns_id, recursive=True)
+ last_vote: ValidatorVote = client.get_json(ipfs_id)
+ return last_vote["public_key"]
+ except ErrorResponse:
+ return None
+
+
+@backoff.on_exception(backoff.expo, Exception, max_time=900)
+def get_validator_deposit_data_public_key(
+ ipfs_id: str, validator_index: int
+) -> Union[None, HexStr]:
+ """Fetches the validator public key from the deposit data submitted from the operator."""
+ ipfs_id = ipfs_id.replace("ipfs://", "").replace("/ipfs/", "")
+ with ipfshttpclient.connect(IPFS_ENDPOINT) as client:
+ deposit_data = client.get_json(ipfs_id)
+ if validator_index < len(deposit_data):
+ return deposit_data[validator_index]["public_key"]
+
+ return None
diff --git a/src/validators/types.py b/src/validators/types.py
new file mode 100644
index 0000000..e1c9e36
--- /dev/null
+++ b/src/validators/types.py
@@ -0,0 +1,27 @@
+from typing import TypedDict, Union
+
+from eth_typing import ChecksumAddress, HexStr
+from web3.types import Wei
+
+
+class InitializeValidatorVotingParameters(TypedDict):
+ validator_index: int
+ validators_nonce: int
+ pool_balance: Wei
+
+
+class FinalizeValidatorVotingParameters(TypedDict):
+ validators_nonce: int
+ operator: Union[ChecksumAddress, None]
+ public_key: Union[HexStr, None]
+
+
+class Validator(TypedDict):
+ operator: ChecksumAddress
+ public_key: HexStr
+
+
+class ValidatorVote(TypedDict):
+ nonce: int
+ public_key: HexStr
+ operator: ChecksumAddress