You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go-Ethereum使用Mumbai节点遇websocket 503握手失败求助

解决Go-Ethereum订阅Mumbai网络事件时的websocket 503错误

问题原因

wss://rpc-mumbai.matic.today这个公共WebSocket端点大概率已经停止服务或被限流,导致握手失败返回503状态码。

解决方案

1. 替换为可用的Mumbai测试网WSS端点

使用当前维护的公共Mumbai WSS节点,比如:

  • wss://polygon-mumbai-bor.publicnode.com
  • wss://ws-mumbai.matic.today

修改Go代码中的节点连接部分:

client, err := ethclient.Dial("wss://polygon-mumbai-bor.publicnode.com")
if err != nil {
    log.Fatalf("Failed to connect to node: %v", err)
}
defer client.Close()

2. 验证端点可用性

用curl命令快速测试WebSocket端点是否正常:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: polygon-mumbai-bor.publicnode.com" -H "Origin: http://localhost" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" https://polygon-mumbai-bor.publicnode.com

如果返回包含101 Switching Protocols的响应,说明端点可用。

3. 切换到付费节点服务(可选)

如果公共节点频繁不稳定,推荐使用Alchemy、Infura等付费节点服务,它们提供更可靠的Mumbai WSS端点,格式类似:

wss://polygon-mumbai.g.alchemy.com/v2/你的API_KEY

注册账号后获取专属端点即可。

4. 确认合约订阅逻辑正确性

替换端点后,确保你的合约事件订阅代码逻辑无误,示例如下(基于你的合约地址):

import (
    "log"
    "github.com/ethereum/go-ethereum/common"
    "your-project/contracts" // 替换为你的合约包路径
)

func main() {
    client, err := ethclient.Dial("wss://polygon-mumbai-bor.publicnode.com")
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    contractAddr := common.HexToAddress("0x6d66A45b628A7B497B618FA637F77a47Ab1E8943")
    contract, err := contracts.NewYourContract(contractAddr, client)
    if err != nil {
        log.Fatal(err)
    }

    // 订阅目标事件(根据你的事件定义调整参数)
    sub, err := contract.WatchYourEvent(nil, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer sub.Unsubscribe()

    // 监听事件流
    for event := range sub.Chan() {
        log.Printf("Received event: %+v", event)
    }
}

内容的提问来源于stack exchange,提问作者Hossein Khoujani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 13:54:22