diff --git a/deploy/gnosis/docker-compose.yml b/deploy/gnosis/docker-compose.yml index 1f2a8421..7af08ef8 100644 --- a/deploy/gnosis/docker-compose.yml +++ b/deploy/gnosis/docker-compose.yml @@ -24,7 +24,7 @@ networks: services: oracle: container_name: oracle_gnosis - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/oracle/main.py"] @@ -34,7 +34,7 @@ services: keeper: container_name: keeper_gnosis - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/keeper/main.py"] diff --git a/deploy/goerli/docker-compose.yml b/deploy/goerli/docker-compose.yml index 6990c7c2..baf8d0eb 100644 --- a/deploy/goerli/docker-compose.yml +++ b/deploy/goerli/docker-compose.yml @@ -26,7 +26,7 @@ networks: services: oracle: container_name: oracle_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/oracle/main.py"] @@ -36,7 +36,7 @@ services: keeper: container_name: keeper_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/keeper/main.py"] @@ -92,7 +92,7 @@ services: subgraphs: container_name: subgraphs_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.2.0 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.3.0 command: > /bin/sh -c "until nc -vz graph-node 8020; do echo 'Waiting graph-node'; sleep 2; done && yarn build:goerli diff --git a/deploy/perm_goerli/.env.example b/deploy/harbour_goerli/.env.example similarity index 70% rename from deploy/perm_goerli/.env.example rename to deploy/harbour_goerli/.env.example index 2137ff1e..1cb96454 100644 --- a/deploy/perm_goerli/.env.example +++ b/deploy/harbour_goerli/.env.example @@ -2,7 +2,7 @@ # Oracle # ########## LOG_LEVEL=INFO -ENABLED_NETWORKS=perm_goerli +ENABLED_NETWORKS=harbour_goerli ENABLE_HEALTH_SERVER=true HEALTH_SERVER_PORT=8080 HEALTH_SERVER_HOST=0.0.0.0 @@ -15,31 +15,31 @@ IPFS_PINATA_API_KEY= IPFS_PINATA_SECRET_KEY= # Change https://api.thegraph.com to http://graph-node:8000 if running local graph node -PERM_GOERLI_STAKEWISE_SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/stakewise/stakewise-perm-goerli -PERM_GOERLI_ETHEREUM_SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/stakewise/ethereum-goerli +HARBOUR_GOERLI_STAKEWISE_SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/stakewise/stakewise-perm-goerli +HARBOUR_GOERLI_ETHEREUM_SUBGRAPH_URL=https://api.thegraph.com/subgraphs/name/stakewise/ethereum-goerli # Ethereum private key # NB! You must use a different private key for every network -PERM_GOERLI_ORACLE_PRIVATE_KEY=0x +HARBOUR_GOERLI_ORACLE_PRIVATE_KEY=0x # ETH2 (consensus) client endpoint # Change if running an external ETH2 node -PERM_GOERLI_ETH2_ENDPOINT=http://eth2-node:5052 +HARBOUR_GOERLI_ETH2_ENDPOINT=http://eth2-node:5052 # AWS bucket to publish oracle votes to -PERM_GOERLI_AWS_ACCESS_KEY_ID= -PERM_GOERLI_AWS_SECRET_ACCESS_KEY= -PERM_GOERLI_AWS_BUCKET_NAME=oracle-votes-perm-goerli -PERM_GOERLI_AWS_REGION=eu-central-1 +HARBOUR_GOERLI_AWS_ACCESS_KEY_ID= +HARBOUR_GOERLI_AWS_SECRET_ACCESS_KEY= +HARBOUR_GOERLI_AWS_BUCKET_NAME=oracle-votes-perm-goerli +HARBOUR_GOERLI_AWS_REGION=eu-central-1 ########## # Keeper # ########## # Change if running an external ETH1 node -PERM_GOERLI_KEEPER_ETH1_ENDPOINT=http://eth1-node:8545 +HARBOUR_GOERLI_KEEPER_ETH1_ENDPOINT=http://eth1-node:8545 # Use https://eth-converter.com/ to calculate -PERM_GOERLI_KEEPER_MIN_BALANCE_WEI=100000000000000000 -PERM_GOERLI_KEEPER_MAX_FEE_PER_GAS_GWEI=150 +HARBOUR_GOERLI_KEEPER_MIN_BALANCE_WEI=100000000000000000 +HARBOUR_GOERLI_KEEPER_MAX_FEE_PER_GAS_GWEI=150 ######## # IPFS # diff --git a/deploy/perm_goerli/docker-compose.yml b/deploy/harbour_goerli/docker-compose.yml similarity index 82% rename from deploy/perm_goerli/docker-compose.yml rename to deploy/harbour_goerli/docker-compose.yml index 17f6aa28..46958a55 100644 --- a/deploy/perm_goerli/docker-compose.yml +++ b/deploy/harbour_goerli/docker-compose.yml @@ -19,34 +19,34 @@ volumes: driver: local networks: - perm_goerli: - name: perm_goerli + harbour_goerli: + name: harbour_goerli driver: bridge services: oracle: - container_name: oracle_perm_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + container_name: oracle_harbour_goerli + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/oracle/main.py"] env_file: [".env"] networks: - - perm_goerli + - harbour_goerli keeper: - container_name: keeper_perm_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + container_name: keeper_harbour_goerli + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/keeper/main.py"] env_file: [".env"] profiles: ["keeper"] networks: - - perm_goerli + - harbour_goerli prometheus: - container_name: prometheus_perm_goerli + container_name: prometheus_harbour_goerli image: bitnami/prometheus:2 restart: always env_file: [".env"] @@ -55,10 +55,10 @@ services: - ../configs/prometheus.yml:/opt/bitnami/prometheus/conf/prometheus.yml - ../configs/rules.yml:/opt/bitnami/prometheus/conf/rules.yml networks: - - perm_goerli + - harbour_goerli alertmanager: - container_name: alertmanager_perm_goerli + container_name: alertmanager_harbour_goerli image: bitnami/alertmanager:0 restart: always env_file: [".env"] @@ -67,20 +67,20 @@ services: - ../configs/alertmanager.yml:/opt/bitnami/alertmanager/conf/config.yml depends_on: ["prometheus"] networks: - - perm_goerli + - harbour_goerli graph-node: - container_name: graph_node_perm_goerli + container_name: graph_node_harbour_goerli image: graphprotocol/graph-node:v0.25.2 restart: always env_file: [".env"] depends_on: ["postgres","ipfs"] profiles: ["graph"] networks: - - perm_goerli + - harbour_goerli postgres: - container_name: postgres_perm_goerli + container_name: postgres_harbour_goerli image: postgres:14-alpine restart: always command: ["postgres", "-cshared_preload_libraries=pg_stat_statements"] @@ -88,14 +88,14 @@ services: volumes: ["postgres:/var/lib/postgresql/data"] profiles: ["graph"] networks: - - perm_goerli + - harbour_goerli subgraphs: - container_name: subgraphs_perm_goerli - image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.2.0 + container_name: subgraphs_harbour_goerli + image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.3.0 command: > /bin/sh -c "until nc -vz graph-node 8020; do echo 'Waiting graph-node'; sleep 2; done - && yarn build:perm_goerli + && yarn build:harbour_goerli && yarn create:local && yarn deploy:local" env_file: [".env"] @@ -103,10 +103,10 @@ services: depends_on: ["graph-node","ipfs"] profiles: ["graph"] networks: - - perm_goerli + - harbour_goerli ipfs: - container_name: ipfs_perm_goerli + container_name: ipfs_harbour_goerli image: ipfs/go-ipfs:v0.12.1 restart: always env_file: [".env"] @@ -117,10 +117,10 @@ services: volumes: ["ipfs:/data/ipfs","../configs/ipfs-entrypoint.sh:/usr/local/bin/start_ipfs"] profiles: ["ipfs"] networks: - - perm_goerli + - harbour_goerli geth: - container_name: geth_perm_goerli + container_name: geth_harbour_goerli image: ethereum/client-go:v1.10.16 restart: always command: @@ -136,12 +136,12 @@ services: volumes: ["geth:/data"] profiles: ["geth"] networks: - perm_goerli: + harbour_goerli: aliases: - eth1-node erigon: - container_name: erigon_perm_goerli + container_name: erigon_harbour_goerli image: thorax/erigon:v2022.03.02 restart: always command: @@ -156,10 +156,10 @@ services: volumes: ["erigon:/home/erigon/.local/share/erigon"] profiles: ["erigon"] networks: - - perm_goerli + - harbour_goerli erigon-rpcdaemon: - container_name: erigon_rpcdaemon_perm_goerli + container_name: erigon_rpcdaemon_harbour_goerli image: thorax/erigon:v2022.03.02 restart: always command: @@ -173,12 +173,12 @@ services: depends_on: ["erigon"] profiles: ["erigon"] networks: - perm_goerli: + harbour_goerli: aliases: - eth1-node prysm: - container_name: prysm_perm_goerli + container_name: prysm_harbour_goerli image: gcr.io/prysmaticlabs/prysm/beacon-chain:v2.0.6 restart: always command: @@ -194,12 +194,12 @@ services: volumes: ["prysm:/data","../configs/genesis.ssz:/data/gensis.ssz"] profiles: ["prysm"] networks: - perm_goerli: + harbour_goerli: aliases: - eth2-node lighthouse: - container_name: lighthouse_perm_goerli + container_name: lighthouse_harbour_goerli image: sigp/lighthouse:v2.1.5 restart: always command: @@ -215,6 +215,6 @@ services: volumes: ["lighthouse:/root/.lighthouse"] profiles: ["lighthouse"] networks: - perm_goerli: + harbour_goerli: aliases: - eth2-node diff --git a/deploy/mainnet/docker-compose.yml b/deploy/mainnet/docker-compose.yml index 9f7f0514..33ce05f0 100644 --- a/deploy/mainnet/docker-compose.yml +++ b/deploy/mainnet/docker-compose.yml @@ -26,7 +26,7 @@ networks: services: oracle: container_name: oracle_mainnet - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/oracle/main.py"] @@ -36,7 +36,7 @@ services: keeper: container_name: keeper_mainnet - image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.4.1 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/oracle:v2.5.0 restart: always entrypoint: ["python"] command: ["oracle/keeper/main.py"] @@ -92,7 +92,7 @@ services: subgraphs: container_name: subgraphs_mainnet - image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.2.0 + image: europe-west4-docker.pkg.dev/stakewiselabs/public/subgraphs:v1.3.0 command: > /bin/sh -c "until nc -vz graph-node 8020; do echo 'Waiting graph-node'; sleep 2; done && yarn build:mainnet diff --git a/oracle/networks.py b/oracle/networks.py index ea2c915a..610876c1 100644 --- a/oracle/networks.py +++ b/oracle/networks.py @@ -6,12 +6,14 @@ MAINNET = "mainnet" GOERLI = "goerli" -PERM_GOERLI = "perm_goerli" +HARBOUR_GOERLI = "harbour_goerli" +HARBOUR_MAINNET = "harbour_mainnet" GNOSIS_CHAIN = "gnosis" MAINNET_UPPER = MAINNET.upper() GOERLI_UPPER = GOERLI.upper() -PERM_GOERLI_UPPER = PERM_GOERLI.upper() +HARBOUR_GOERLI_UPPER = HARBOUR_GOERLI.upper() +HARBOUR_MAINNET_UPPER = HARBOUR_GOERLI.upper() GNOSIS_CHAIN_UPPER = GNOSIS_CHAIN.upper() NETWORKS = { @@ -91,6 +93,88 @@ IS_POA=False, DEPOSIT_TOKEN_SYMBOL="ETH", ), + HARBOUR_MAINNET: dict( + STAKEWISE_SUBGRAPH_URLS=config( + f"{HARBOUR_MAINNET_UPPER}_STAKEWISE_SUBGRAPH_URLs", + default="https://graph.stakewise.io/subgraphs/name/stakewise/stakewise-harbour-mainnet,https://api.thegraph.com/subgraphs/name/stakewise/stakewise-harbour-mainnet", + cast=Csv(), + ), + ETHEREUM_SUBGRAPH_URLS=config( + f"{HARBOUR_MAINNET_UPPER}_ETHEREUM_SUBGRAPH_URLs", + default="https://graph.stakewise.io/subgraphs/name/stakewise/ethereum,https://api.thegraph.com/subgraphs/name/stakewise/ethereum-mainnet", + cast=Csv(), + ), + UNISWAP_V3_SUBGRAPH_URLS=config( + f"{HARBOUR_MAINNET_UPPER}_UNISWAP_V3_SUBGRAPH_URLs", + default="", + cast=Csv(), + ), + ETH2_ENDPOINT=config(f"{HARBOUR_MAINNET_UPPER}_ETH2_ENDPOINT", default=""), + VALIDATORS_FETCH_CHUNK_SIZE=config( + f"{HARBOUR_MAINNET_UPPER}_VALIDATORS_FETCH_CHUNK_SIZE", + default=100, + cast=int, + ), + VALIDATORS_BATCH_SIZE=config( + f"{HARBOUR_MAINNET_UPPER}_VALIDATORS_BATCH_SIZE", + default=10, + cast=int, + ), + SLOTS_PER_EPOCH=32, + SECONDS_PER_SLOT=12, + ORACLES_CONTRACT_ADDRESS=Web3.toChecksumAddress( + "0x16c0020fC507C675eA8A3A817416adA3D95c661b" + ), + MULTICALL_CONTRACT_ADDRESS=Web3.toChecksumAddress( + "0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441" + ), + SWISE_TOKEN_CONTRACT_ADDRESS=Web3.toChecksumAddress( + "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2" + ), + REWARD_TOKEN_CONTRACT_ADDRESS=Web3.toChecksumAddress( + "0xCBE26dbC91B05C160050167107154780F36CeAAB" + ), + STAKED_TOKEN_CONTRACT_ADDRESS=Web3.toChecksumAddress( + "0x65077fA7Df8e38e135bd4052ac243F603729892d" + ), + DISTRIBUTOR_FALLBACK_ADDRESS=Web3.toChecksumAddress( + "0x6C7692dB59FDC7A659208EEE57C2c876aE54a448" + ), + WITHDRAWAL_CREDENTIALS=HexStr( + "0x0100000000000000000000005c631621b897f467dd6a91855a0bc97d77b78dc0" + ), + ORACLE_PRIVATE_KEY=config( + f"{HARBOUR_MAINNET_UPPER}_ORACLE_PRIVATE_KEY", default="" + ), + AWS_BUCKET_NAME=config( + f"{HARBOUR_MAINNET_UPPER}_AWS_BUCKET_NAME", default="oracle-votes-mainnet" + ), + AWS_REGION=config( + f"{HARBOUR_MAINNET_UPPER}_AWS_REGION", default="eu-central-1" + ), + AWS_ACCESS_KEY_ID=config( + f"{HARBOUR_MAINNET_UPPER}_AWS_ACCESS_KEY_ID", default="" + ), + AWS_SECRET_ACCESS_KEY=config( + f"{HARBOUR_MAINNET_UPPER}_AWS_SECRET_ACCESS_KEY", default="" + ), + KEEPER_ETH1_ENDPOINT=config( + f"{HARBOUR_MAINNET_UPPER}_KEEPER_ETH1_ENDPOINT", default="" + ), + KEEPER_MIN_BALANCE=config( + f"{HARBOUR_MAINNET_UPPER}_KEEPER_MIN_BALANCE_WEI", + default=Web3.toWei(0.1, "ether"), + cast=int, + ), + KEEPER_MAX_FEE_PER_GAS=config( + f"{HARBOUR_MAINNET_UPPER}_KEEPER_MAX_FEE_PER_GAS_GWEI", + default=150, + cast=lambda x: Web3.toWei(x, "gwei"), + ), + SYNC_PERIOD=timedelta(days=1), + IS_POA=False, + DEPOSIT_TOKEN_SYMBOL="ETH", + ), GOERLI: dict( STAKEWISE_SUBGRAPH_URLS=config( f"{GOERLI_UPPER}_STAKEWISE_SUBGRAPH_URL", @@ -165,30 +249,30 @@ IS_POA=True, DEPOSIT_TOKEN_SYMBOL="ETH", ), - PERM_GOERLI: dict( + HARBOUR_GOERLI: dict( STAKEWISE_SUBGRAPH_URLS=config( - f"{PERM_GOERLI_UPPER}_STAKEWISE_SUBGRAPH_URL", + f"{HARBOUR_GOERLI_UPPER}_STAKEWISE_SUBGRAPH_URL", default="https://api.thegraph.com/subgraphs/name/stakewise/stakewise-perm-goerli", cast=Csv(), ), ETHEREUM_SUBGRAPH_URLS=config( - f"{PERM_GOERLI_UPPER}_ETHEREUM_SUBGRAPH_URL", + f"{HARBOUR_GOERLI_UPPER}_ETHEREUM_SUBGRAPH_URL", default="https://api.thegraph.com/subgraphs/name/stakewise/ethereum-goerli", cast=Csv(), ), UNISWAP_V3_SUBGRAPH_URLS=config( - f"{PERM_GOERLI_UPPER}_UNISWAP_V3_SUBGRAPH_URL", + f"{HARBOUR_GOERLI_UPPER}_UNISWAP_V3_SUBGRAPH_URL", default="", cast=Csv(), ), - ETH2_ENDPOINT=config(f"{PERM_GOERLI_UPPER}_ETH2_ENDPOINT", default=""), + ETH2_ENDPOINT=config(f"{HARBOUR_GOERLI_UPPER}_ETH2_ENDPOINT", default=""), VALIDATORS_FETCH_CHUNK_SIZE=config( - f"{PERM_GOERLI_UPPER}_VALIDATORS_FETCH_CHUNK_SIZE", + f"{HARBOUR_GOERLI_UPPER}_VALIDATORS_FETCH_CHUNK_SIZE", default=100, cast=int, ), VALIDATORS_BATCH_SIZE=config( - f"{PERM_GOERLI_UPPER}_VALIDATORS_BATCH_SIZE", + f"{HARBOUR_GOERLI_UPPER}_VALIDATORS_BATCH_SIZE", default=10, cast=int, ), @@ -216,26 +300,29 @@ "0x0100000000000000000000006dfc9682e3c3263758ad96e2b2ba9822167f81ee" ), ORACLE_PRIVATE_KEY=config( - f"{PERM_GOERLI_UPPER}_ORACLE_PRIVATE_KEY", default="" + f"{HARBOUR_GOERLI_UPPER}_ORACLE_PRIVATE_KEY", default="" ), AWS_BUCKET_NAME=config( - f"{PERM_GOERLI_UPPER}_AWS_BUCKET_NAME", default="oracle-votes-perm-goerli" + f"{HARBOUR_GOERLI_UPPER}_AWS_BUCKET_NAME", + default="oracle-votes-perm-goerli", + ), + AWS_REGION=config(f"{HARBOUR_GOERLI_UPPER}_AWS_REGION", default="eu-central-1"), + AWS_ACCESS_KEY_ID=config( + f"{HARBOUR_GOERLI_UPPER}_AWS_ACCESS_KEY_ID", default="" ), - AWS_REGION=config(f"{PERM_GOERLI_UPPER}_AWS_REGION", default="eu-central-1"), - AWS_ACCESS_KEY_ID=config(f"{PERM_GOERLI_UPPER}_AWS_ACCESS_KEY_ID", default=""), AWS_SECRET_ACCESS_KEY=config( - f"{PERM_GOERLI_UPPER}_AWS_SECRET_ACCESS_KEY", default="" + f"{HARBOUR_GOERLI_UPPER}_AWS_SECRET_ACCESS_KEY", default="" ), KEEPER_ETH1_ENDPOINT=config( - f"{PERM_GOERLI_UPPER}_KEEPER_ETH1_ENDPOINT", default="" + f"{HARBOUR_GOERLI_UPPER}_KEEPER_ETH1_ENDPOINT", default="" ), KEEPER_MIN_BALANCE=config( - f"{PERM_GOERLI_UPPER}_KEEPER_MIN_BALANCE_WEI", + f"{HARBOUR_GOERLI_UPPER}_KEEPER_MIN_BALANCE_WEI", default=Web3.toWei(0.1, "ether"), cast=int, ), KEEPER_MAX_FEE_PER_GAS=config( - f"{PERM_GOERLI_UPPER}_KEEPER_MAX_FEE_PER_GAS_GWEI", + f"{HARBOUR_GOERLI_UPPER}_KEEPER_MAX_FEE_PER_GAS_GWEI", default=150, cast=lambda x: Web3.toWei(x, "gwei"), ), diff --git a/oracle/oracle/distributor/uniswap_v3.py b/oracle/oracle/distributor/uniswap_v3.py index 1c9eab69..15b8a06b 100644 --- a/oracle/oracle/distributor/uniswap_v3.py +++ b/oracle/oracle/distributor/uniswap_v3.py @@ -6,7 +6,7 @@ from eth_typing import BlockNumber, ChecksumAddress from web3 import Web3 -from oracle.networks import GNOSIS_CHAIN, NETWORKS, PERM_GOERLI +from oracle.networks import GNOSIS_CHAIN, HARBOUR_GOERLI, HARBOUR_MAINNET, NETWORKS from oracle.oracle.clients import ( execute_uniswap_v3_gql_query, execute_uniswap_v3_paginated_gql_query, @@ -41,7 +41,7 @@ async def get_uniswap_v3_pools( network: str, block_number: BlockNumber ) -> UniswapV3Pools: """Fetches Uniswap V3 pools.""" - if network in (GNOSIS_CHAIN, PERM_GOERLI): + if network in (GNOSIS_CHAIN, HARBOUR_GOERLI, HARBOUR_MAINNET): return UniswapV3Pools( staked_token_pools=set(), reward_token_pools=set(), diff --git a/pyproject.toml b/pyproject.toml index df9f2209..f7905721 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "oracle" -version = "2.4.1" +version = "2.5.0" description = "StakeWise Oracles are responsible for submitting off-chain data." authors = ["Dmitri Tsumak "] license = "AGPL-3.0-only"