web3 Websocket-Verbindung zu infura

Ich erhalte diesen Fehler, wenn ich versuche, eine Verbindung zum Websocket herzustellen

WebSocket-Verbindung zu „wss://ropsten.infura.io/ws“ fehlgeschlagen: Fehler beim WebSocket-Handshake: Nicht leerer „Sec-WebSocket-Protocol“-Header gesendet, aber keine Antwort erhalten

Code-Auszug

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));
}); 

Was mache ich hier falsch?

Antworten (4)

Das funktioniert

#!/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!');
});

Nehmen Sie dieses Beispiel von https://github.com/egalano

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

Ich bekomme wieder den gleichen Fehler für dieses Stück Code. Ich verwende web3.js 1.0.0-beta.34. Wäre das ein Problem oder was ist zu prüfen?
Hast du es mit einer anderen Version versucht?
Die Version 0.20.6 funktionierte auf HTTP und hat kein Websocket. Welche Version verwendest du?
web3@1.0.0-beta.34
Ich habe auf web3@1.0.0-beta.35 aktualisiert und bekam den gleichen Fehler. Mit Beta-34 oder Beta-33 würde das nicht passieren
das funktioniert mit...beta.36

Es scheint, dass ein Wert des WebSocket-Anforderungsheaders ungültig ist.

Genauer gesagt, ein Wert von Sec-WebSocket-Protocolist undefined.

Gemäß dem unten stehenden Github-Problem wurde das Problem von eingeführtweb3@1.0.0-beta.34

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

Ich habe bestätigt, web3@1.0.0-beta.35dass das Problem in meiner Umgebung noch nicht behoben wurde. Daher web3@1.0.0-beta.33ist ein Downgrade auf erforderlich, wenn Sie in diesem Moment WebSocket verwenden.

Ja, das Downgrade hat bei mir funktioniert. Danke für den Fund.
Auch jetzt noch?

Verwenden Sie Ihre Infrua-ID, um MYID zu ersetzen:

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
    }
}