From cca28c35a73eba72e930ad901f9d19e86d31d46e Mon Sep 17 00:00:00 2001 From: czarly <379651+czarly@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:20:24 +0400 Subject: [PATCH] added dshackle confgured with free node providers for ethereum --- dshackle.yml | 41 +++++++++++++++++++++ dshackle/config/alchemy.yaml | 41 +++++++++++++++++++++ dshackle/config/ankr.yaml | 14 ++++++++ dshackle/config/anyblock.yaml | 14 ++++++++ dshackle/config/avado.yaml | 14 ++++++++ dshackle/config/chainstack.yaml | 22 ++++++++++++ dshackle/config/cloudflare.yaml | 14 ++++++++ dshackle/config/coinbase.yaml | 31 ++++++++++++++++ dshackle/config/dshackle.yaml | 64 +++++++++++++++++++++++++++++++++ dshackle/config/infura.yaml | 16 +++++++++ dshackle/config/quicknode.yaml | 29 +++++++++++++++ dshackle/config/rivet.yaml | 16 +++++++++ 12 files changed, 316 insertions(+) create mode 100644 dshackle.yml create mode 100644 dshackle/config/alchemy.yaml create mode 100644 dshackle/config/ankr.yaml create mode 100644 dshackle/config/anyblock.yaml create mode 100644 dshackle/config/avado.yaml create mode 100644 dshackle/config/chainstack.yaml create mode 100644 dshackle/config/cloudflare.yaml create mode 100644 dshackle/config/coinbase.yaml create mode 100644 dshackle/config/dshackle.yaml create mode 100644 dshackle/config/infura.yaml create mode 100644 dshackle/config/quicknode.yaml create mode 100644 dshackle/config/rivet.yaml diff --git a/dshackle.yml b/dshackle.yml new file mode 100644 index 00000000..c7d4c746 --- /dev/null +++ b/dshackle.yml @@ -0,0 +1,41 @@ +version: '3.1' + +services: + + dshackle: + container_name: dshackle + image: emeraldpay/dshackle:0.13.1 + restart: unless-stopped + volumes: + - ./dshackle/config:/etc/dshackle # This should hold all your yaml files + ports: + - "8080:8080" + - "8081:8081" + - "8082:8082" + environment: + - ALCHEMY_KEY=${ALCHEMY_KEY} + - ANYBLOCK_KEY=${ANYBLOCK_KEY} + - CHAINSTACK_NODE=${CHAINSTACK_NODE} + - CHAINSTACK_USERNAME=${CHAINSTACK_USERNAME} + - CHAINSTACK_PASSWORD=${CHAINSTACK_PASSWORD} + - COINBASE_USERNAME=${COINBASE_USERNAME} + - COINBASE_PASSWORD=${COINBASE_PASSWORD} + - INFURA_KEY=${INFURA_KEY} + - RIVET_KEY=${RIVET_KEY} + - QUICKNODE_HTTP=${QUICKNODE_HTTP} + - QUICKNODE_WSS=${QUICKNODE_WSS} + + redis: + container_name: redis + image: healthcheck/redis:alpine + restart: unless-stopped + environment: + - REDIS_RAM=${REDIS_RAM} + command: + - "redis-server" + - "--maxmemory ${REDIS_RAM}" + - "--maxmemory-policy allkeys-lru" + - '--save ""' + + + diff --git a/dshackle/config/alchemy.yaml b/dshackle/config/alchemy.yaml new file mode 100644 index 00000000..1f71dd3c --- /dev/null +++ b/dshackle/config/alchemy.yaml @@ -0,0 +1,41 @@ +upstreams: + - id: alchemy + chain: ethereum + role: fallback + priority: 90 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + methods: + enabled: + # Manually Enabled + - name: alchemy_getAssetTransfers + - name: alchemy_getTokenAllowance + - name: alchemy_getTokenBalances + - name: alchemy_getTokenMetadata + - name: eth_getFilterChanges + - name: eth_getFilterLogs + - name: eth_maxPriorityFeePerGas + - name: eth_newBlockFilter + - name: eth_newFilter + - name: eth_newPendingTransactionFilter + - name: eth_subscribe + - name: eth_uninstallFilter + - name: eth_unsubscribe + - name: trace_block + - name: trace_call + - name: trace_callMany + - name: trace_filter + - name: trace_get + - name: trace_rawTransaction + - name: trace_replayBlockTransactions + - name: trace_replayTransaction + - name: trace_transaction + connection: + ethereum: + rpc: + url: "https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}" + ws: + url: "wss://eth-mainnet.ws.alchemyapi.io/v2/${ALCHEMY_KEY}" + diff --git a/dshackle/config/ankr.yaml b/dshackle/config/ankr.yaml new file mode 100644 index 00000000..432671e4 --- /dev/null +++ b/dshackle/config/ankr.yaml @@ -0,0 +1,14 @@ +upstreams: + - id: ankr + chain: ethereum + role: fallback + priority: 80 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://rpc.ankr.com/eth" + diff --git a/dshackle/config/anyblock.yaml b/dshackle/config/anyblock.yaml new file mode 100644 index 00000000..aeb7c211 --- /dev/null +++ b/dshackle/config/anyblock.yaml @@ -0,0 +1,14 @@ +upstreams: + - id: anyblock + chain: ethereum + role: fallback + priority: 70 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://api.anyblock.tools/ethereum/ethereum/mainnet/rpc/${ANYBLOCK_KEY}" + diff --git a/dshackle/config/avado.yaml b/dshackle/config/avado.yaml new file mode 100644 index 00000000..d07bb8e1 --- /dev/null +++ b/dshackle/config/avado.yaml @@ -0,0 +1,14 @@ +upstreams: + - id: avado + chain: ethereum + role: fallback + priority: 60 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://mainnet.eth.cloud.ava.do" + diff --git a/dshackle/config/chainstack.yaml b/dshackle/config/chainstack.yaml new file mode 100644 index 00000000..ccf30382 --- /dev/null +++ b/dshackle/config/chainstack.yaml @@ -0,0 +1,22 @@ +upstreams: + - id: chainstack + chain: ethereum + role: fallback + priority: 50 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://${CHAINSTACK_NODE}.p2pify.com" + basic-auth: + username: ${CHAINSTACK_USERNAME} + password: ${CHAINSTACK_PASSWORD} + ws: + url: "wss://ws-${CHAINSTACK_NODE}.p2pify.com" + basic-auth: + username: ${CHAINSTACK_USERNAME} + password: ${CHAINSTACK_PASSWORD} + diff --git a/dshackle/config/cloudflare.yaml b/dshackle/config/cloudflare.yaml new file mode 100644 index 00000000..9996ab86 --- /dev/null +++ b/dshackle/config/cloudflare.yaml @@ -0,0 +1,14 @@ +upstreams: + - id: cloudflare + chain: ethereum + role: fallback + priority: 40 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://cloudflare-eth.com" + diff --git a/dshackle/config/coinbase.yaml b/dshackle/config/coinbase.yaml new file mode 100644 index 00000000..58c209dd --- /dev/null +++ b/dshackle/config/coinbase.yaml @@ -0,0 +1,31 @@ +upstreams: + - id: coinbase + chain: ethereum + role: secondary + priority: 30 + labels: + provider: geth + archive: false + options: + disable-validation: false + validate-peers: false + validate-syncing: true + methods: + enabled: + # Manually Enabled + - name: coinbaseCloud_getBalances + - name: coinbaseCloud_getSingleBalance + - name: coinbaseCloud_getTokenAllowances + - name: coinbaseCloud_getTransactionByHash + - name: coinbaseCloud_getTransactionsByAddress + - name: coinbaseCloud_getTokenTransfersByAddress + - name: coinbaseCloud_getTokenMetadata + - name: coinbaseCloud_getTokenStandardEvents + connection: + ethereum: + rpc: + url: "https://mainnet.ethereum.coinbasecloud.net" + basic-auth: + username: ${COINBASE_USERNAME} + password: ${COINBASE_PASSWORD} + diff --git a/dshackle/config/dshackle.yaml b/dshackle/config/dshackle.yaml new file mode 100644 index 00000000..a59d02ef --- /dev/null +++ b/dshackle/config/dshackle.yaml @@ -0,0 +1,64 @@ +host: 0.0.0.0 +port: 2449 + +tls: + enabled: false + +monitoring: + enabled: true + jvm: false + extended: false + prometheus: + enabled: true + bind: 0.0.0.0 + port: 8081 + path: /metrics + +health: + port: 8082 + host: 0.0.0.0 + path: /health + blockchains: + - chain: ethereum + min-available: 1 + +cache: + redis: + enabled: true + host: redis + password: "" + +proxy: + host: 0.0.0.0 + port: 8080 + tls: + enabled: false + routes: + - id: eth + blockchain: ethereum + +cluster: + defaults: + - chains: + - ethereum + options: + min-peers: 10 + include: + # Private Nodes + #- "besu.yaml" + #- "geth.yaml" + #- "nethermind.yaml" + #- "erigon.yaml" + # Freemium Nodes + - "alchemy.yaml" + - "anyblock.yaml" + - "chainstack.yaml" + - "coinbase.yaml" + - "infura.yaml" + - "quicknode.yaml" + - "rivet.yaml" + # Public Nodes + - "cloudflare.yaml" + - "avado.yaml" + - "ankr.yaml" + diff --git a/dshackle/config/infura.yaml b/dshackle/config/infura.yaml new file mode 100644 index 00000000..758b48a5 --- /dev/null +++ b/dshackle/config/infura.yaml @@ -0,0 +1,16 @@ +upstreams: + - id: infura + chain: ethereum + role: fallback + priority: 20 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://mainnet.infura.io/v3/${INFURA_KEY}" + ws: + url: "wss://mainnet.infura.io/ws/v3/${INFURA_KEY}" + diff --git a/dshackle/config/quicknode.yaml b/dshackle/config/quicknode.yaml new file mode 100644 index 00000000..6b050b16 --- /dev/null +++ b/dshackle/config/quicknode.yaml @@ -0,0 +1,29 @@ +upstreams: + - id: quicknode + chain: ethereum + role: fallback + priority: 140 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + methods: + enabled: + # Manually Enabled + - name: qn_broadcastRawTransaction + - name: qn_fetchNFTCollectionDetails + - name: qn_fetchNFTs + - name: qn_fetchNFTsByCollection + - name: qn_getTokenMetadataByContractAddress + - name: qn_getTokenMetadataBySymbol + - name: qn_getTransfersByNFT + - name: qn_getWalletTokenBalance + - name: qn_getWalletTokenTransactions + - name: qn_verifyNFTsOwner + connection: + ethereum: + rpc: + url: "${QUICKNODE_HTTP}" + ws: + url: "${QUICKNODE_WSS}" + diff --git a/dshackle/config/rivet.yaml b/dshackle/config/rivet.yaml new file mode 100644 index 00000000..88ea8db5 --- /dev/null +++ b/dshackle/config/rivet.yaml @@ -0,0 +1,16 @@ +upstreams: + - id: rivet + chain: ethereum + role: fallback + priority: 10 + options: + disable-validation: false + validate-peers: false + validate-syncing: true + connection: + ethereum: + rpc: + url: "https://${RIVET_KEY}.eth.rpc.rivet.cloud" + ws: + url: "wss://${RIVET_KEY}.eth.ws.rivet.cloud" +