web3 Websocket подключение к инфуре

Я получаю эту ошибку, когда пытаюсь подключиться к веб-сокету

Ошибка подключения WebSocket к «wss://ropsten.infura.io/ws»: ошибка во время рукопожатия WebSocket: отправлен непустой заголовок «Sec-WebSocket-Protocol», но ответ не получен

Фрагмент кода

import web3 from 'web3';
var web3lib = new web3(
  new web3.providers.WebsocketProvider('wss://ropsten.infura.io/ws'),
);  
console.log(
  'provider in web3 eth: ' + JSON.stringify(web3lib.currentProvider),
);  
console.log('New block in web3 eth: ' + web3lib.blockNumber);
var subscription = web3lib.eth.subscribe('newBlockHeaders', function(
  error,
  result,
) { 
   if (!error)
       console.log("output of web3 stream"+JSON.stringify(result));
       else
  console.log('Error of web3 stream ' + JSON.stringify(result));
}); 

Что я здесь делаю неправильно?

Ответы (4)

Это работает

#!/usr/bin/env node
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.WebsocketProvider('wss://mainnet.infura.io/ws'));

const subscription = web3.eth.subscribe('newBlockHeaders', (error, blockHeader) => {
if (error) return console.error(error);

console.log('Successfully subscribed!', blockHeader);
}).on('data', (blockHeader) => {
console.log('data: ', blockHeader);
});

// unsubscribes the subscription
subscription.unsubscribe((error, success) => {
if (error) return console.error(error);

console.log('Successfully unsubscribed!');
});

Взял этот пример, предоставленный https://github.com/egalano.

https://github.com/INFURA/infura/issues/29#issuecomment-365128914

Я снова получаю ту же ошибку для этого фрагмента кода. Я использую web3.js 1.0.0-beta.34. Будет ли это проблемой или еще что проверить?
Вы пробовали с какой-либо другой версией?
Версия 0.20.6 работала по HTTP и не имела Websocket. Какую версию вы используете?
web3@1.0.0-beta.34
Я обновился до web3@1.0.0-beta.35 и начал получать ту же ошибку. Не произойдет с бета-34 или бета-33
это работает с...beta.36

Кажется, что значение заголовка запроса WebSocket недопустимо.

Более конкретно, значение Sec-WebSocket-Protocolравно undefined.

Согласно приведенной ниже проблеме github, проблема была введена изweb3@1.0.0-beta.34

https://github.com/ethereum/web3.js/issues/1559

Я подтвердил, web3@1.0.0-beta.35что еще не устранил проблему в моей среде. Поэтому web3@1.0.0-beta.33необходимо перейти на более раннюю версию, если вы используете WebSocket в данный момент.

Да, понижение рейтинга сработало для меня. Спасибо за находку.
Еще и сейчас?

используя свой infrua ID для замены MYID :

client, err := ethclient.Dial("wss://mainnet.infura.io/ws/v3/MYID") 

if err != nil {
    log.Fatal(err)
}

headers := make(chan *types.Header)
sub, err := client.SubscribeNewHead(context.Background(), headers)
if err != nil {
    log.Fatal(err)
}

for {
    select {
    case err := <-sub.Err():
        log.Fatal(err)
    case header := <-headers:
        fmt.Println(header.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f

        block, err := client.BlockByHash(context.Background(), header.Hash())
        if err != nil {
            log.Fatal(err)
        }

        log.Printf("TX:%s", block.Hash().Hex())          // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
        log.Printf("Height:%d", block.Number().Uint64()) // 3477413
        log.Printf("Time:%d", block.Time())              // 1529525947
        log.Println(block.Nonce())                       // 130524141876765836
        log.Printf("#:%d", len(block.Transactions()))    // 7
    }
}