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