Skip to content

Proxy crashes on startup with invalid_dc_id for negative DC IDs #116

@AliAlimohammadi

Description

@AliAlimohammadi

Description

The proxy fails to start and enters an infinite crash/restart loop after Telegram began returning negative DC IDs (e.g. -203) in their configuration. The dc_to_pool_name/1 function in mtp_dc_pool.erl raises {invalid_dc_id, DcId} for any unrecognised DC ID, which propagates up through mtp_config and kills the application on startup.

Error

{invalid_dc_id,[{mtp_dc_pool,dc_to_pool_name,[-203],
  [{file,"/build/mtproto_proxy/src/mtp_dc_pool.erl"},{line,73}]}

Fix (confirmed working)

Instead of crashing on unknown DC IDs, skip them:

sed -i 's/error({invalid_dc_id, DcId})/begin io:format("Skipping invalid dc_id: ~p~n", [DcId]), skip end/' src/mtp_dc_pool.erl

Full steps to build and deploy the patched image:

git clone https://github.com/seriyps/mtproto_proxy.git
cd mtproto_proxy
sed -i 's/error({invalid_dc_id, DcId})/begin io:format("Skipping invalid dc_id: ~p~n", [DcId]), skip end/' src/mtp_dc_pool.erl
docker build -t mtproto-proxy-patched .
docker run -d \
  --name mtproto_proxy \
  --restart=always \
  --network host \
  mtproto-proxy-patched \
  -p <port> \
  -s <secret> \
  -t <tag> \
  -a dd

This fix makes the proxy skip any DC IDs it doesn't recognise rather than crashing, and the proxy starts and runs correctly.

Environment

  • Image: seriyps/mtproto-proxy:latest
  • Erlang: erts-10.3.5.19
  • Release: 0.1.0
  • Observed: February 2026 (following a Telegram infrastructure change)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions