diff --git a/proxyd/Dockerfile b/proxyd/Dockerfile index b066e0e..febb6a0 100644 --- a/proxyd/Dockerfile +++ b/proxyd/Dockerfile @@ -6,7 +6,7 @@ ARG GITVERSION=docker RUN apk add make jq git gcc musl-dev linux-headers -COPY ./proxyd /app +COPY . /app WORKDIR /app @@ -16,7 +16,7 @@ FROM alpine:3.18 RUN apk add bind-tools jq curl bash git redis -COPY ./proxyd/entrypoint.sh /bin/entrypoint.sh +COPY ./entrypoint.sh /bin/entrypoint.sh RUN apk update && \ apk add ca-certificates && \ @@ -24,9 +24,11 @@ RUN apk update && \ EXPOSE 8080 -VOLUME /etc/proxyd +# VOLUME /etc/proxyd + +ADD ./docker.toml /proxyd.toml COPY --from=builder /app/bin/proxyd /bin/proxyd ENTRYPOINT ["/bin/entrypoint.sh"] -CMD ["/bin/proxyd", "/etc/proxyd/proxyd.toml"] +CMD ["/bin/proxyd", "/proxyd.toml"] \ No newline at end of file diff --git a/proxyd/docker-compose.yml b/proxyd/docker-compose.yml new file mode 100644 index 0000000..e163043 --- /dev/null +++ b/proxyd/docker-compose.yml @@ -0,0 +1,20 @@ +services: + redis: + container_name: redis + image: redis:6.2-alpine + restart: always + #networks: + # - tornado_net + command: ["redis-server"] + proxyd: + container_name: proxyd + image: proxyd + restart: always + #networks: + # - tornado_net + environment: + - REDIS_URL=redis://redis:6379 + - RPC_URL= + - WS_URL= + ports: + - '127.0.0.1:8544:8544' \ No newline at end of file diff --git a/proxyd/docker.toml b/proxyd/docker.toml new file mode 100644 index 0000000..a5edbf4 --- /dev/null +++ b/proxyd/docker.toml @@ -0,0 +1,171 @@ +ws_method_whitelist = [ + "eth_subscribe", + "eth_unsubscribe", + "eth_blobBaseFee", + "eth_blockNumber", + "eth_call", + "eth_chainId", + "eth_estimateGas", + "eth_feeHistory", + "eth_gasPrice", + "eth_getAccount", + "eth_getBalance", + "eth_getBlockByHash", + "eth_getBlockByNumber", + "eth_getBlockReceipts", + "eth_getBlockTransactionCountByHash", + "eth_getBlockTransactionCountByNumber", + "eth_getCode", + "eth_getFilterChanges", + "eth_getFilterLogs", + "eth_getLogs", + "eth_getProof", + "eth_getStorageAt", + "eth_getTransactionByBlockHashAndIndex", + "eth_getTransactionByBlockNumberAndIndex", + "eth_getTransactionByHash", + "eth_getTransactionCount", + "eth_getTransactionReceipt", + "eth_getUncleCountByBlockHash", + "eth_getUncleCountByBlockNumber", + "eth_maxPriorityFeePerGas", + "eth_newBlockFilter", + "eth_newFilter", + "eth_newPendingTransactionFilter", + "eth_syncing", + "eth_uninstallFilter", + "eth_sendRawTransaction", + "net_version", + "web3_clientVersion", + "web3_sha3", + # tracers for archive nodes + "trace_block", + "trace_call", + "trace_callMany", + "trace_filter", + "trace_rawTransaction", + "trace_replayBlockTransactions", + "trace_replayTransaction", + "trace_transaction", + "debug_getBadBlocks", + "debug_storageRangeAt", + "debug_getTrieFlushInterval", + "debug_traceBlock", + "debug_traceBlockByHash", + "debug_traceBlockByNumber", + "debug_traceCall", + "debug_traceTransaction", +] +ws_backend_group = "main" + +[rpc_method_mappings] +eth_blobBaseFee = "main" +eth_blockNumber = "main" +eth_call = "main" +eth_chainId = "main" +eth_estimateGas = "main" +eth_feeHistory = "main" +eth_gasPrice = "main" +eth_getAccount = "main" +eth_getBalance = "main" +eth_getBlockByHash = "main" +eth_getBlockByNumber = "main" +eth_getBlockReceipts = "main" +eth_getBlockTransactionCountByHash = "main" +eth_getBlockTransactionCountByNumber = "main" +eth_getCode = "main" +eth_getFilterChanges = "main" +eth_getFilterLogs = "main" +eth_getLogs = "main" +eth_getProof = "main" +eth_getStorageAt = "main" +eth_getTransactionByBlockHashAndIndex = "main" +eth_getTransactionByBlockNumberAndIndex = "main" +eth_getTransactionByHash = "main" +eth_getTransactionCount = "main" +eth_getTransactionReceipt = "main" +eth_getUncleCountByBlockHash = "main" +eth_getUncleCountByBlockNumber = "main" +eth_maxPriorityFeePerGas = "main" +eth_newBlockFilter = "main" +eth_newFilter = "main" +eth_newPendingTransactionFilter = "main" +eth_syncing = "main" +eth_uninstallFilter = "main" +eth_sendRawTransaction = "main" +net_version = "main" +web3_clientVersion = "main" +web3_sha3 = "main" +trace_block = "main" +trace_call = "main" +trace_callMany = "main" +trace_filter = "main" +trace_rawTransaction = "main" +trace_replayBlockTransactions = "main" +trace_replayTransaction = "main" +trace_transaction = "main" +debug_getBadBlocks = "main" +debug_storageRangeAt = "main" +debug_getTrieFlushInterval = "main" +debug_traceBlock = "main" +debug_traceBlockByHash = "main" +debug_traceBlockByNumber = "main" +debug_traceCall = "main" +debug_traceTransaction = "main" + +[server] +rpc_host = "0.0.0.0" +rpc_port = 8544 +enable_ws = true +max_body_size_bytes = 10485760 +max_concurrent_rpcs = 1000 +log_level = "info" +allow_direct = true + +[cache] +enabled = true +ttl = "14s" + +[redis] +url = "$REDIS_URL" + +[metrics] +enabled = true +host = "0.0.0.0" +port = 9761 + +[rate_limit] +use_redis = true +base_rate = 12000 +base_interval = "60s" + +[backend] +response_timeout_seconds = 120 +max_response_size_bytes = 5242880 +max_retries = 3 +out_of_service_seconds = 600 +max_latency_threshold = "30s" +max_degraded_latency_threshold = "10s" +max_error_rate_threshold = 0.3 + +[backends] +[backends.main] +rpc_url = "$RPC_URL" +ws_url = "$WS_URL" +max_rps = 1000 +max_ws_conns = 100 +consensus_skip_peer_count = true +consensus_receipts_target = "eth_getBlockReceipts" + +[backend_groups] +[backend_groups.main] +backends = ["main"] +consensus_aware = false +# consensus_aware = true +consensus_ban_period = "1m" +consensus_max_update_threshold = "20s" +consensus_max_block_lag = 16 +# Maximum block range (for eth_getLogs method), no default +# consensus_max_block_range = 20000 +# Minimum peer count, default 3 +# consensus_min_peer_count = 4 \ No newline at end of file diff --git a/proxyd/rewriter.go b/proxyd/rewriter.go index 605787e..9c8766f 100644 --- a/proxyd/rewriter.go +++ b/proxyd/rewriter.go @@ -64,7 +64,9 @@ func RewriteRequest(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResul switch req.Method { case "eth_getLogs", "eth_newFilter": - return rewriteRange(rctx, req, res, 0) + // return rewriteRange(rctx, req, res, 0) + // Tornado: disable range check unti the UI is fixed + return RewriteNone, nil case "debug_getRawReceipts", "consensus_getReceipts": return rewriteParam(rctx, req, res, 0, true, false) case "eth_getBalance", @@ -307,4 +309,4 @@ func rewriteTagBlockNumberOrHash(rctx RewriteContext, current *rpc.BlockNumberOr } return current, false, nil -} +} \ No newline at end of file